<?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>145272</bug_id>
          
          <creation_ts>2015-05-21 10:41:18 -0700</creation_ts>
          <short_desc>Allow DFGClobberize to return non-node constants that must be later created</short_desc>
          <delta_ts>2015-05-22 10:24:37 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Basile Clement">basile_clement</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096611</commentid>
    <comment_count>0</comment_count>
      <attachid>253531</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 10:41:18 -0700</bug_when>
    <thetext>Created attachment 253531
Patch

This allows to perform GCSE on various derived properties, e.g. NewArray and NewArrayBuffer operations can now def() their length and elements.
However benchmark times are showing a slight slowdown in most cases, possibly due to LazyNode having twice the size of a Node*, so I am not sure this is worth pursuing.


VMs tested:
&quot;r184563&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc
&quot;LazyNode&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/LazyNode/Release/jsc

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

                                                         r184563                   LazyNode                                     
SunSpider:
   3d-cube                                            5.5958+-0.0865     ?      5.8460+-0.4815        ? might be 1.0447x slower
   3d-morph                                           6.2566+-0.2356            6.2029+-0.0786        
   3d-raytrace                                        7.3565+-0.5512     ?      7.5049+-0.7255        ? might be 1.0202x slows-binary-trees                                2.5433+-0.0671            2.5153+-0.0792          might be 1.0111x faster
   access-fannkuch                                    6.4220+-0.1774     ?      6.4694+-0.2324        ?
   access-nbody                                       3.2775+-0.1311     ?      3.2961+-0.1086        ?
   access-nsieve                                      3.7972+-0.0496     ?      3.8669+-0.1252        ? might be 1.0184x slower
   bitops-3bit-bits-in-byte                           1.8843+-0.0307            1.8678+-0.0371        
   bitops-bits-in-byte                                4.0953+-0.3240            3.9525+-0.0235          might be 1.0361x faster
   bitops-bitwise-and                                 2.3938+-0.0743     ?      2.4095+-0.1241        ?
   bitops-nsieve-bits                                 3.3548+-0.0307     ?      3.4363+-0.0969        ? might be 1.0243x slower
   controlflow-recursive                              2.5837+-0.0482     ?      2.6094+-0.0921        ?
   crypto-aes                                         4.8667+-0.2032     ?      4.9058+-0.1634        ?
   crypto-md5                                         3.2022+-0.1813            3.0210+-0.0637          might be 1.0600x faster
   crypto-sha1                                        2.9074+-0.0750     ?      2.9875+-0.0803        ? might be 1.0275x slower
   date-format-tofte                                  9.7618+-0.1570     !     10.1823+-0.2422        ! definitely 1.0431x slower
   date-format-xparb                                  6.0007+-0.2546            5.9954+-0.1352        
   math-cordic                                        3.4667+-0.0440     ?      3.4802+-0.0950        ?
   math-partial-sums                                  5.7629+-0.1971            5.7099+-0.0955        
   math-spectral-norm                                 2.2364+-0.0417            2.2328+-0.0342        
   regexp-dna                                         7.6018+-0.4129     ?      7.7063+-0.2153        ? might be 1.0138x slower
   string-base64                                      4.9342+-0.1932     ?      5.3086+-0.5814        ? might be 1.0759x slower
   string-fasta                                       7.1153+-0.4140            7.0105+-0.0973          might be 1.0150x faster
   string-tagcloud                                    9.6119+-0.2963     ?      9.6543+-0.2093        ?
   string-unpack-code                                23.0662+-0.3903           22.8006+-0.7064          might be 1.0117x faster
   string-validate-input                              5.1487+-0.1521     ?      5.2473+-0.1480        ? might be 1.0191x slower

   &lt;arithmetic&gt;                                       5.5863+-0.0374     ?      5.6238+-0.0468        ? might be 1.0067x slower

                                                         r184563                   LazyNode                                     
LongSpider:
   3d-cube                                          913.7970+-3.3810          912.0046+-7.7612        
   3d-morph                                        1621.1681+-7.4300         1618.3591+-2.6318        
   3d-raytrace                                      761.9025+-4.0496     ?    770.3277+-5.0641        ? might be 1.0111x slower
   access-binary-trees                              982.5473+-4.5580          980.5644+-5.1910        
   access-fannkuch                                  347.5348+-7.0749     ?    356.8676+-5.2365        ? might be 1.0269x slower
   access-nbody                                     657.4551+-4.4060     ?    658.2690+-6.1242        ?
   access-nsieve                                    456.2196+-1.8920     ?    458.2618+-4.7839        ?
   bitops-3bit-bits-in-byte                          50.2865+-1.0622           49.3991+-0.4626          might be 1.0180x faster
   bitops-bits-in-byte                               96.2498+-2.0276           95.4416+-1.9466        
   bitops-nsieve-bits                               458.2042+-1.3964     ?    458.8349+-2.2730        ?
   controlflow-recursive                            516.0721+-10.3228         507.4290+-9.1283          might be 1.0170x faster
   crypto-aes                                       705.8217+-3.7954     ?    710.3498+-7.3331        ?
   crypto-md5                                       556.6390+-3.0809          552.6717+-8.7751        
   crypto-sha1                                      650.5811+-3.1077     ?    650.6198+-5.1834        ?
   date-format-tofte                                753.5545+-10.2933    ?    767.4705+-30.7566       ? might be 1.0185x slower
   date-format-xparb                                801.0511+-15.4129    ?    821.0804+-53.1946       ? might be 1.0250x slower
   hash-map                                         178.6357+-2.6035          177.4950+-3.6629        
   math-cordic                                      625.6297+-2.3321     ?    626.9688+-2.6336        ?
   math-partial-sums                                536.1773+-2.1122     ?    537.3185+-1.6334        ?
   math-spectral-norm                               599.7354+-2.0827          597.9998+-0.8408        
   string-base64                                    387.0317+-6.3622     ?    387.5868+-1.7826        ?
   string-fasta                                     440.2025+-3.0652     ?    445.1368+-5.1657        ? might be 1.0112x slower
   string-tagcloud                                  211.3362+-2.1322     ?    211.5856+-2.2579        ?

   &lt;geometric&gt;                                      468.2684+-1.4996     ?    469.1828+-1.3670        ? might be 1.0020x slower

                                                         r184563                   LazyNode                                     
V8Spider:
   crypto                                            60.1779+-0.4219     ?     60.9095+-0.7864        ? might be 1.0122x slower
   deltablue                                         78.5908+-0.7993     ?     81.3490+-2.2980        ? might be 1.0351x slower
   earley-boyer                                      50.6913+-0.9270     ?     52.3994+-0.9749        ? might be 1.0337x slower
   raytrace                                          35.0801+-0.5549     ?     35.6145+-1.1122        ? might be 1.0152x slower
   regexp                                            83.4762+-0.6414     !     85.9648+-0.8090        ! definitely 1.0298x slower
   richards                                          85.6635+-1.3492     ?     86.0355+-1.8324        ?
   splay                                             42.7482+-2.1486           40.5745+-2.1689          might be 1.0536x faster

   &lt;geometric&gt;                                       59.2646+-0.5336     ?     59.9100+-0.7483        ? might be 1.0109x slower

                                                         r184563                   LazyNode                                     
Octane:
   encrypt                                           0.23868+-0.00089          0.23848+-0.00076       
   decrypt                                           4.10974+-0.03742          4.09817+-0.01296       
   deltablue                                x2       0.20225+-0.00107    ?     0.20401+-0.00245       ?
   earley                                            0.40597+-0.00757          0.40357+-0.00526       
   boyer                                             5.34681+-0.04248    ?     5.36599+-0.06054       ?
   navier-stokes                            x2       5.48995+-0.00284    ?     5.50454+-0.03203       ?
   raytrace                                 x2       1.27543+-0.03174          1.27363+-0.07198       
   richards                                 x2       0.12174+-0.00077    ?     0.12240+-0.00164       ?
   splay                                    x2       0.41571+-0.00330          0.41443+-0.00351       
   regexp                                   x2      31.57241+-0.13366    !    32.58668+-0.21558       ! definitely 1.0321x slower
   pdfjs                                    x2      44.50533+-0.19535         44.38525+-0.20375       
   mandreel                                 x2      56.44360+-0.61245    ?    56.45549+-0.47209       ?
   gbemu                                    x2      45.43001+-0.54924    ?    46.05530+-0.23286       ? might be 1.0138x slower
   closure                                           0.63733+-0.00747    ?     0.64022+-0.00110       ?
   jquery                                            8.03837+-0.03164    ?     8.05255+-0.04257       ?
   box2d                                    x2      13.90540+-0.08320    ?    14.07070+-0.12457       ? might be 1.0119x slower
   zlib                                     x2     417.60479+-15.05195   ?   428.88154+-2.71078       ? might be 1.0270x slower
   typescript                               x2     879.91752+-9.56239    ?   886.98694+-11.00127      ?

   &lt;geometric&gt;                                       6.95968+-0.02457    ?     7.00677+-0.03133       ? might be 1.0068x slower

                                                         r184563                   LazyNode                                     
Kraken:
   ai-astar                                          328.873+-9.072            324.693+-8.547           might be 1.0129x faster
   audio-beat-detection                              117.331+-0.635      ?     118.743+-3.178         ? might be 1.0120x slower
   audio-dft                                         118.772+-1.424            118.440+-0.605         
   audio-fft                                          85.740+-0.442      ?      88.176+-2.954         ? might be 1.0284x slower
   audio-oscillator                                   77.799+-1.136      ?      77.890+-0.951         ?
   imaging-darkroom                                  110.156+-0.334      ?     111.802+-2.453         ? might be 1.0149x slower
   imaging-desaturate                                 69.340+-1.943             68.271+-0.226           might be 1.0157x faster
   imaging-gaussian-blur                             115.611+-0.808      ?     116.098+-0.645         ?
   json-parse-financial                               48.291+-0.758             47.464+-0.731           might be 1.0174x faster
   json-stringify-tinderbox                           30.112+-0.525      ?      30.895+-0.637         ? might be 1.0260x slower
   stanford-crypto-aes                                62.264+-1.442      ?      63.035+-1.425         ? might be 1.0124x slower
   stanford-crypto-ccm                                54.121+-1.409      ?      56.132+-1.928         ? might be 1.0371x slower
   stanford-crypto-pbkdf2                            123.101+-0.886      ?     123.181+-0.746         ?
   stanford-crypto-sha256-iterative                   47.185+-0.471             47.178+-0.569         

   &lt;arithmetic&gt;                                       99.193+-0.579      ?      99.428+-0.759         ? might be 1.0024x slower

                                                         r184563                   LazyNode                                     
JSRegress:
   abs-boolean                                        2.9448+-0.1133            2.9204+-0.0708        
   adapt-to-double-divide                            17.7455+-0.3221     ?     17.8637+-0.3871        ?
   aliased-arguments-getbyval                         1.4830+-0.0552     ?      1.5621+-0.0788        ? might be 1.0533x slower
   allocate-big-object                                2.9347+-0.1707            2.8660+-0.1429          might be 1.0240x faster
   arguments-named-and-reflective                    11.7869+-0.4247     ?     11.8432+-0.2650        ?
   arguments-out-of-bounds                           15.5932+-0.3579           15.3845+-0.3204          might be 1.0136x faster
   arguments-strict-mode                             10.9822+-0.2438     ?     11.0573+-0.4500        ?
   arguments                                          9.7804+-0.1164     ?      9.8039+-0.2232        ?
   arity-mismatch-inlining                            1.0749+-0.0243     ?      1.1048+-0.0421        ? might be 1.0278x slower
   array-access-polymorphic-structure                 6.8218+-0.3136            6.6059+-0.1839          might be 1.0327x faster
   array-nonarray-polymorhpic-access                 33.4447+-0.8074     ?     34.1285+-0.8454        ? might be 1.0204x slower
   array-prototype-every                             88.3684+-0.9195           87.8878+-0.6348        
   array-prototype-forEach                           86.0128+-1.9091           85.7215+-0.5540        
   array-prototype-map                               94.4423+-1.5329     ?     97.1439+-2.7135        ? might be 1.0286x slower
   array-prototype-some                              89.2525+-2.0830           88.8333+-1.3243        
   array-splice-contiguous                           46.9301+-0.5436     ^     44.5112+-0.8715        ^ definitely 1.0543x faster
   array-with-double-add                              4.4251+-0.1306     ?      4.4317+-0.1238        ?
   array-with-double-increment                        3.5485+-0.0755     ?      3.6508+-0.0956        ? might be 1.0288x slower
   array-with-double-mul-add                          5.3842+-0.1401            5.3270+-0.0385          might be 1.0107x faster
   array-with-double-sum                              3.5695+-0.0798     ?      3.5841+-0.1253        ?
   array-with-int32-add-sub                           7.2261+-0.1833     ?      7.3567+-0.2706        ? might be 1.0181x slower
   array-with-int32-or-double-sum                     3.6238+-0.1018     ?      3.7216+-0.1043        ? might be 1.0270x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     32.7051+-0.6701     ?     33.2933+-1.1491        ? might be 1.0180x slower
   ArrayBuffer-DataView-alloc-long-lived             13.8057+-0.5105           13.7291+-0.8062        
   ArrayBuffer-Int32Array-byteOffset                  4.2892+-0.4647            4.1637+-0.1067          might be 1.0301x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.8123+-0.6517           33.2284+-0.6405          might be 1.0176x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.5682+-0.4724     ?     22.6937+-0.8574        ?
   ArrayBuffer-Int8Array-alloc-long-lived            13.3350+-0.4488     ^     12.5682+-0.2589        ^ definitely 1.0610x faster
   ArrayBuffer-Int8Array-alloc                       10.8617+-0.3366           10.8299+-0.3658        
   asmjs_bool_bug                                     8.0946+-0.3371            7.9809+-0.1819          might be 1.0143x faster
   assign-custom-setter-polymorphic                   3.5849+-0.0782     ^      3.4071+-0.0815        ^ definitely 1.0522x faster
   assign-custom-setter                               4.7427+-0.0876     ^      4.4633+-0.1110        ^ definitely 1.0626x faster
   basic-set                                          9.6147+-0.1984     ?      9.8532+-0.1237        ? might be 1.0248x slower
   big-int-mul                                        4.3864+-0.0682     ?      4.4386+-0.0944        ? might be 1.0119x slower
   boolean-test                                       3.3689+-0.0545     ?      3.4175+-0.1003        ? might be 1.0144x slower
   branch-fold                                        4.2027+-0.1267            4.1424+-0.1083          might be 1.0146x faster
   branch-on-string-as-boolean                       19.1180+-0.4156           18.9506+-0.3172        
   by-val-generic                                     8.3842+-0.3366            8.2486+-0.2397          might be 1.0164x faster
   call-spread-apply                                 31.9555+-0.6495           31.7853+-1.2550        
   call-spread-call                                  26.8160+-0.4524     ?     26.9495+-0.9921        ?
   captured-assignments                               0.5684+-0.0173     ?      0.5750+-0.0852        ? might be 1.0117x slower
   cast-int-to-double                                 5.8539+-0.1164            5.8433+-0.1658        
   cell-argument                                      8.8365+-0.4118            8.6899+-0.2489          might be 1.0169x faster
   cfg-simplify                                       3.1240+-0.0933            3.0292+-0.0394          might be 1.0313x faster
   chain-getter-access                                9.8833+-0.3651     ?      9.9398+-0.3499        ?
   cmpeq-obj-to-obj-other                            10.5902+-0.0293     !     11.2344+-0.2592        ! definitely 1.0608x slower
   constant-test                                      5.5092+-0.0841     ?      5.5446+-0.1489        ?
   create-lots-of-functions                          11.6818+-0.2407     ?     12.0720+-0.2098        ? might be 1.0334x slower
   DataView-custom-properties                        38.1008+-0.4833           37.6851+-0.4088          might be 1.0110x faster
   deconstructing-parameters-overridden-by-function   
                                                      0.6576+-0.0389     ?      0.6965+-0.0699        ? might be 1.0592x slower
   delay-tear-off-arguments-strictmode               14.6068+-0.3364     ?     14.6665+-0.4411        ?
   deltablue-varargs                                221.4560+-2.0287     ?    228.1925+-7.6578        ? might be 1.0304x slower
   destructuring-arguments                           18.1044+-0.2746     ?     18.1785+-0.4288        ?
   destructuring-swap                                 5.6447+-0.0732            5.6069+-0.1097        
   direct-arguments-getbyval                          1.5212+-0.1373            1.4899+-0.1003          might be 1.0210x faster
   div-boolean-double                                 5.6097+-0.0406     ?      5.6730+-0.0867        ? might be 1.0113x slower
   div-boolean                                        8.3556+-0.1183     ?      8.4106+-0.1127        ?
   double-get-by-val-out-of-bounds                    4.7744+-0.0957            4.6941+-0.0830          might be 1.0171x faster
   double-pollution-getbyval                          9.4692+-0.2054     ?      9.5517+-0.1641        ?
   double-pollution-putbyoffset                       4.6523+-0.1151     ?      4.6830+-0.1230        ?
   double-to-int32-typed-array-no-inline              2.5735+-0.1058     ?      2.6545+-0.0509        ? might be 1.0315x slower
   double-to-int32-typed-array                        2.3940+-0.2019            2.3183+-0.0655          might be 1.0326x faster
   double-to-uint32-typed-array-no-inline             2.6684+-0.0374     ?      2.7152+-0.0363        ? might be 1.0175x slower
   double-to-uint32-typed-array                       2.3225+-0.0428     ?      2.3263+-0.0319        ?
   elidable-new-object-dag                           43.6554+-0.9737           42.5930+-1.2543          might be 1.0249x faster
   elidable-new-object-roflcopter                    43.8786+-0.5137     ?     44.1873+-1.2527        ?
   elidable-new-object-then-call                     36.9308+-2.3893           35.9998+-1.9452          might be 1.0259x faster
   elidable-new-object-tree                          44.8844+-0.9857     ?     45.4725+-2.0450        ? might be 1.0131x slower
   empty-string-plus-int                              5.5727+-0.0739     ?      5.6248+-0.1349        ?
   emscripten-cube2hash                              40.2340+-0.4935     ?     40.5459+-1.0289        ?
   exit-length-on-plain-object                       14.1093+-0.4957     ?     14.4658+-0.7560        ? might be 1.0253x slower
   external-arguments-getbyval                        1.5553+-0.0696            1.5017+-0.0561          might be 1.0357x faster
   external-arguments-putbyval                        2.5879+-0.0521            2.5542+-0.0553          might be 1.0132x faster
   fixed-typed-array-storage-var-index                1.4799+-0.0469     ?      1.5148+-0.0774        ? might be 1.0235x slower
   fixed-typed-array-storage                          1.1262+-0.0417            1.1125+-0.0182          might be 1.0123x faster
   Float32Array-matrix-mult                           4.7526+-0.1016            4.7190+-0.0351        
   Float32Array-to-Float64Array-set                  56.0048+-0.8556           55.7231+-1.3257        
   Float64Array-alloc-long-lived                     69.9382+-1.1713     ?     70.4974+-1.5951        ?
   Float64Array-to-Int16Array-set                    73.1580+-0.8572     ^     71.4912+-0.6485        ^ definitely 1.0233x faster
   fold-double-to-int                                14.8043+-0.1871     ?     15.0086+-0.1709        ? might be 1.0138x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.1685+-0.3363            9.0899+-0.2073        
   fold-get-by-id-to-multi-get-by-offset              7.7672+-0.1557            7.6825+-0.0732          might be 1.0110x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.6239+-0.5655     ?      7.6497+-0.5049        ?
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.2418+-0.4802     ?      7.8127+-0.2455        ? might be 1.0788x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      6.9403+-0.3709     ?      6.9843+-0.3320        ?
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.3389+-0.5603            5.3260+-0.5312        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.9369+-0.8924           10.4559+-0.7265          might be 1.0460x faster
   fold-put-by-id-to-multi-put-by-offset              7.5475+-0.3878     ?      7.7815+-0.2871        ? might be 1.0310x slower
   fold-put-structure                                 4.6709+-0.0495            4.6240+-0.0604          might be 1.0101x faster
   for-of-iterate-array-entries                       4.7843+-0.1067            4.7570+-0.1529        
   for-of-iterate-array-keys                          3.8958+-0.0942     ?      3.9873+-0.1590        ? might be 1.0235x slower
   for-of-iterate-array-values                        3.8415+-0.0749     ?      3.9017+-0.0487        ? might be 1.0157x slower
   fround                                            21.1878+-0.5334     ?     21.7553+-1.3380        ? might be 1.0268x slower
   ftl-library-inlining-dataview                     70.3019+-0.8211           69.8300+-0.7415        
   ftl-library-inlining                              77.5988+-19.6854    ?     85.0678+-23.1938       ? might be 1.0963x slower
   function-dot-apply                                 2.4148+-0.0495     ?      2.4810+-0.0691        ? might be 1.0274x slower
   function-test                                      3.1029+-0.0783     ?      3.1574+-0.0692        ? might be 1.0176x slower
   function-with-eval                               103.3401+-1.5235          102.6449+-2.6357        
   gcse-poly-get-less-obvious                        20.1307+-1.7468     ?     20.3417+-1.7684        ? might be 1.0105x slower
   gcse-poly-get                                     21.5837+-1.1584     ?     24.7697+-2.7013        ? might be 1.1476x slower
   gcse                                               4.7041+-0.1573            4.7011+-0.1272        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.9633+-0.0568     ?      3.0076+-0.0802        ? might be 1.0149x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.8177+-0.1878            6.5337+-0.1454          might be 1.0435x faster
   get-by-id-chain-from-try-block                     7.0081+-0.1768            6.9694+-0.1717        
   get-by-id-check-structure-elimination              5.6711+-0.1163            5.5732+-0.1767          might be 1.0176x faster
   get-by-id-proto-or-self                           19.4390+-1.1330     ?     21.1914+-2.9691        ? might be 1.0901x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.2557+-0.1244            3.2428+-0.0917        
   get-by-id-self-or-proto                           19.2597+-0.7481     ?     20.8533+-3.1370        ? might be 1.0827x slower
   get-by-val-out-of-bounds                           4.7043+-0.1229            4.6262+-0.0824          might be 1.0169x faster
   get_callee_monomorphic                             2.9193+-0.0659     ?      3.0098+-0.1557        ? might be 1.0310x slower
   get_callee_polymorphic                             3.7317+-0.1835     ?      3.8743+-0.2835        ? might be 1.0382x slower
   getter-no-activation                               5.6031+-0.0379            5.5953+-0.0221        
   getter-richards                                  108.2904+-1.4587     ?    109.7300+-2.8638        ? might be 1.0133x slower
   getter                                             6.1247+-0.0906     ?      6.1262+-0.0539        ?
   global-var-const-infer-fire-from-opt               1.2523+-0.1528            1.2242+-0.1413          might be 1.0230x faster
   global-var-const-infer                             0.9907+-0.0981     ?      1.0038+-0.1079        ? might be 1.0133x slower
   HashMap-put-get-iterate-keys                      27.2616+-0.1343     ?     27.9943+-0.7439        ? might be 1.0269x slower
   HashMap-put-get-iterate                           26.9834+-0.3556     ?     27.1722+-0.1060        ?
   HashMap-string-put-get-iterate                    29.4722+-0.8961     ?     30.1141+-0.9752        ? might be 1.0218x slower
   hoist-make-rope                                   11.7945+-0.8998     ?     12.2884+-1.0085        ? might be 1.0419x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.6108+-0.1027     ?      5.6955+-0.5088        ? might be 1.0151x slower
   hoist-poly-check-structure                         4.0030+-0.1261            3.9570+-0.0845          might be 1.0116x faster
   imul-double-only                                   7.8079+-0.1907     ?      8.2066+-0.2734        ? might be 1.0511x slower
   imul-int-only                                      9.9446+-0.4942            9.6400+-0.3481          might be 1.0316x faster
   imul-mixed                                         8.2326+-0.5338            8.1720+-0.4412        
   in-four-cases                                     23.1034+-0.3956     ?     23.2138+-0.2842        ?
   in-one-case-false                                 12.1019+-0.4111           12.0651+-0.1904        
   in-one-case-true                                  11.9946+-0.2936     ?     12.0406+-0.1962        ?
   in-two-cases                                      12.7050+-0.4708     ?     12.7134+-0.2624        ?
   indexed-properties-in-objects                      3.1568+-0.0582     ?      3.2507+-0.0873        ? might be 1.0298x slower
   infer-closure-const-then-mov-no-inline             4.5292+-0.1063     ?      4.6452+-0.0921        ? might be 1.0256x slower
   infer-closure-const-then-mov                      21.2727+-0.3290     ?     21.8548+-0.8981        ? might be 1.0274x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.8341+-0.1103     ?     12.9614+-0.4795        ?
   infer-closure-const-then-put-to-scope             22.5762+-0.7959     ?     23.6531+-0.9010        ? might be 1.0477x slower
   infer-closure-const-then-reenter-no-inline   
                                                     59.7540+-0.4505     ?     59.8718+-0.4469        ?
   infer-closure-const-then-reenter                  22.9551+-0.8342           22.9273+-0.7696        
   infer-constant-global-property                     3.8060+-0.0696            3.7577+-0.0523          might be 1.0129x faster
   infer-constant-property                            2.9586+-0.1266     ?      3.1896+-0.4448        ? might be 1.0781x slower
   infer-one-time-closure-ten-vars                   12.6798+-0.1406           12.6613+-0.1562        
   infer-one-time-closure-two-vars                   12.6129+-0.7808           12.2511+-0.2401          might be 1.0295x faster
   infer-one-time-closure                            12.1335+-0.1437     ?     12.1879+-0.1423        ?
   infer-one-time-deep-closure                       21.6786+-0.5467           21.5230+-0.3822        
   inline-arguments-access                            4.3393+-0.1938            4.3003+-0.1277        
   inline-arguments-aliased-access                    4.3260+-0.0999            4.2578+-0.1087          might be 1.0160x faster
   inline-arguments-local-escape                      4.5020+-0.2930            4.3824+-0.1228          might be 1.0273x faster
   inline-get-scoped-var                              5.4495+-0.0545            5.4485+-0.0571        
   inlined-put-by-id-transition                      11.7281+-0.2337           11.6143+-0.1747        
   int-or-other-abs-then-get-by-val                   5.4440+-0.0803     ?      5.5092+-0.0981        ? might be 1.0120x slower
   int-or-other-abs-zero-then-get-by-val             18.6464+-0.2970           18.5734+-0.8064        
   int-or-other-add-then-get-by-val                   4.7153+-0.0544     ?      4.8196+-0.1327        ? might be 1.0221x slower
   int-or-other-add                                   5.7422+-0.1544     ?      5.8425+-0.1376        ? might be 1.0175x slower
   int-or-other-div-then-get-by-val                   4.6764+-0.0901            4.6379+-0.0956        
   int-or-other-max-then-get-by-val                   4.7975+-0.1690     ?      4.8348+-0.1172        ?
   int-or-other-min-then-get-by-val                   4.8901+-0.1517            4.8803+-0.1715        
   int-or-other-mod-then-get-by-val                   4.4520+-0.1712     ?      4.5366+-0.1597        ? might be 1.0190x slower
   int-or-other-mul-then-get-by-val                   4.2076+-0.0844     ?      4.2213+-0.1212        ?
   int-or-other-neg-then-get-by-val                   5.2406+-0.0519     ?      5.2487+-0.1467        ?
   int-or-other-neg-zero-then-get-by-val             18.4791+-0.2448     ?     18.4967+-0.2847        ?
   int-or-other-sub-then-get-by-val                   4.7939+-0.1516            4.7497+-0.0544        
   int-or-other-sub                                   3.9666+-0.0402            3.9524+-0.2695        
   int-overflow-local                                 4.9384+-0.1815            4.8389+-0.1088          might be 1.0205x faster
   Int16Array-alloc-long-lived                       49.3133+-1.2327     ?     49.4244+-0.5724        ?
   Int16Array-bubble-sort-with-byteLength            20.7950+-0.4950     ?     21.0070+-0.9020        ? might be 1.0102x slower
   Int16Array-bubble-sort                            20.6752+-0.2090     ^     20.0352+-0.1533        ^ definitely 1.0319x faster
   Int16Array-load-int-mul                            1.7755+-0.0361            1.7588+-0.0536        
   Int16Array-to-Int32Array-set                      54.0530+-0.9502           53.3159+-0.2601          might be 1.0138x faster
   Int32Array-alloc-large                            21.4474+-0.5404           21.4143+-0.5769        
   Int32Array-alloc-long-lived                       55.1489+-0.6213     ?     55.4640+-1.5163        ?
   Int32Array-alloc                                   2.8781+-0.1410     ?      3.0127+-0.2432        ? might be 1.0467x slower
   Int32Array-Int8Array-view-alloc                    6.4722+-0.0572     ?      6.7074+-0.3304        ? might be 1.0363x slower
   int52-spill                                        6.3579+-0.0648     ?      6.4058+-0.1510        ?
   Int8Array-alloc-long-lived                        44.6940+-0.9962           44.3044+-1.3355        
   Int8Array-load-with-byteLength                     3.7852+-0.3575            3.6750+-0.0307          might be 1.0300x faster
   Int8Array-load                                     3.6872+-0.0577            3.6849+-0.0864        
   integer-divide                                    12.1199+-0.3800     ?     12.2667+-0.3116        ? might be 1.0121x slower
   integer-modulo                                     2.5320+-0.1837            2.5075+-0.1674        
   is-boolean-fold-tricky                             4.9117+-0.1245            4.7953+-0.0863          might be 1.0243x faster
   is-boolean-fold                                    3.0551+-0.0535     ?      3.1301+-0.0740        ? might be 1.0246x slower
   is-function-fold-tricky-internal-function   
                                                     12.8330+-0.2972           12.7511+-0.2780        
   is-function-fold-tricky                            5.2293+-0.6368            4.8785+-0.0386          might be 1.0719x faster
   is-function-fold                                   3.1090+-0.0664     ?      3.1155+-0.0552        ?
   is-number-fold-tricky                              4.9141+-0.1435            4.8375+-0.0697          might be 1.0158x faster
   is-number-fold                                     3.1316+-0.0764     ?      3.1570+-0.0796        ?
   is-object-or-null-fold-functions                   3.1534+-0.1006     ?      3.2102+-0.0862        ? might be 1.0180x slower
   is-object-or-null-fold-less-tricky                 5.0657+-0.1046     ^      4.8191+-0.0544        ^ definitely 1.0512x faster
   is-object-or-null-fold-tricky                      7.1770+-0.2065     ?      7.1801+-0.1412        ?
   is-object-or-null-fold                             3.1257+-0.0790            3.1130+-0.0846        
   is-object-or-null-trickier-function                5.1281+-0.1538            4.9630+-0.0817          might be 1.0333x faster
   is-object-or-null-trickier-internal-function   
                                                     13.5082+-0.1603           13.3831+-0.1452        
   is-object-or-null-tricky-function                  5.0752+-0.2140     ?      5.1529+-0.3611        ? might be 1.0153x slower
   is-object-or-null-tricky-internal-function   
                                                     10.1974+-0.3080     ^      9.7996+-0.0580        ^ definitely 1.0406x faster
   is-string-fold-tricky                              4.8964+-0.0831     ?      4.9560+-0.2010        ? might be 1.0122x slower
   is-string-fold                                     3.0518+-0.0698     ?      3.1127+-0.1158        ? might be 1.0199x slower
   is-undefined-fold-tricky                           3.9450+-0.0660     ?      4.0682+-0.1057        ? might be 1.0312x slower
   is-undefined-fold                                  3.1158+-0.0644            3.0872+-0.0670        
   large-int-captured                                 4.7336+-0.2319     ?      4.8638+-0.1926        ? might be 1.0275x slower
   large-int-neg                                     17.2000+-0.5194           17.1093+-0.3734        
   large-int                                         15.6413+-0.3055     ?     16.0004+-0.4375        ? might be 1.0230x slower
   load-varargs-elimination                          25.9607+-0.3349     ?     26.5315+-0.8365        ? might be 1.0220x slower
   logical-not                                        5.0847+-0.0788     ?      5.1389+-0.1116        ? might be 1.0107x slower
   lots-of-fields                                    13.4226+-0.5618     ?     14.2407+-0.3583        ? might be 1.0610x slower
   make-indexed-storage                               3.2358+-0.3031     ?      3.2464+-0.3862        ?
   make-rope-cse                                      4.0562+-0.1923            3.9864+-0.1428          might be 1.0175x faster
   marsaglia-larger-ints                             42.4079+-0.7219           41.6765+-0.7135          might be 1.0176x faster
   marsaglia-osr-entry                               23.7762+-0.5942     ?     23.8015+-1.0261        ?
   max-boolean                                        2.6930+-0.0446     ?      2.7087+-0.0735        ?
   method-on-number                                  18.9564+-0.3880     ^     17.7610+-0.3114        ^ definitely 1.0673x faster
   min-boolean                                        2.7662+-0.0817            2.7167+-0.0743          might be 1.0182x faster
   minus-boolean-double                               3.3923+-0.0215     ?      3.4561+-0.0655        ? might be 1.0188x slower
   minus-boolean                                      2.5516+-0.0311     ?      2.6183+-0.1253        ? might be 1.0262x slower
   misc-strict-eq                                    40.5641+-0.4491     ?     40.9549+-0.7357        ?
   mod-boolean-double                                11.6232+-0.1537     ?     11.7470+-0.2982        ? might be 1.0107x slower
   mod-boolean                                        8.5114+-0.1821     ?      8.5485+-0.2753        ?
   mul-boolean-double                                 4.1385+-0.2486            4.0344+-0.1168          might be 1.0258x faster
   mul-boolean                                        3.1416+-0.1081            3.1358+-0.0280        
   neg-boolean                                        3.4116+-0.1012     ?      3.4210+-0.0538        ?
   negative-zero-divide                               0.4670+-0.0244            0.4640+-0.0229        
   negative-zero-modulo                               0.4505+-0.0256     ?      0.4829+-0.0945        ? might be 1.0719x slower
   negative-zero-negate                               0.4352+-0.0143            0.4221+-0.0298          might be 1.0310x faster
   nested-function-parsing                           38.9521+-0.5677     ?     40.6336+-2.9389        ? might be 1.0432x slower
   new-array-buffer-dead                            104.2596+-0.7854          103.8648+-0.2802        
   new-array-buffer-push                              6.7837+-0.5438            6.6443+-0.3746          might be 1.0210x faster
   new-array-dead                                    19.4286+-0.6951     ?     19.5995+-0.3695        ?
   new-array-push                                     3.9730+-0.1461     ?      4.1221+-0.1797        ? might be 1.0375x slower
   no-inline-constructor                             39.7671+-0.6818           39.4660+-1.3021        
   number-test                                        3.3147+-0.0728     ?      3.3419+-0.0838        ?
   object-closure-call                                6.0239+-0.2645     ?      6.1760+-0.2121        ? might be 1.0253x slower
   object-test                                        3.0926+-0.0803     ?      3.2063+-0.1516        ? might be 1.0368x slower
   obvious-sink-pathology-taken                     126.7196+-2.1278     ?    127.0551+-1.4851        ?
   obvious-sink-pathology                           119.8670+-1.0109     ?    119.9386+-0.6034        ?
   obviously-elidable-new-object                     35.8866+-0.5515           35.1518+-0.6442          might be 1.0209x faster
   plus-boolean-arith                                 2.7503+-0.0981     ?      2.7868+-0.1249        ? might be 1.0133x slower
   plus-boolean-double                                3.5451+-0.1921            3.4444+-0.0796          might be 1.0292x faster
   plus-boolean                                       2.5769+-0.0301     ?      2.6285+-0.0777        ? might be 1.0201x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.6388+-0.1220            3.5918+-0.0777          might be 1.0131x faster
   poly-chain-access-different-prototypes             2.8038+-0.0861     ?      2.9341+-0.1723        ? might be 1.0465x slower
   poly-chain-access-simpler                          3.5669+-0.1514            3.5146+-0.0328          might be 1.0149x faster
   poly-chain-access                                  2.8373+-0.0387     ?      2.8981+-0.0758        ? might be 1.0214x slower
   poly-stricteq                                     60.8954+-0.7019     ?     62.4316+-2.1167        ? might be 1.0252x slower
   polymorphic-array-call                             1.6663+-0.0443     ?      1.6682+-0.0855        ?
   polymorphic-get-by-id                              3.4983+-0.4571            3.3947+-0.1169          might be 1.0305x faster
   polymorphic-put-by-id                             32.5243+-1.3978     ?     35.2653+-1.3828        ? might be 1.0843x slower
   polymorphic-structure                             15.8225+-0.3630     ?     15.8833+-0.2586        ?
   polyvariant-monomorphic-get-by-id                  9.3790+-0.1685            9.3152+-0.1704        
   proto-getter-access                                9.8065+-0.2285            9.7849+-0.2237        
   put-by-id-replace-and-transition                   9.7684+-0.3647            9.4053+-0.1543          might be 1.0386x faster
   put-by-id-slightly-polymorphic                     3.0419+-0.0405     ?      3.1223+-0.0928        ? might be 1.0264x slower
   put-by-id                                         13.3006+-0.4399     ?     13.3219+-0.5095        ?
   put-by-val-direct                                  0.4459+-0.0308     ?      0.4511+-0.0259        ? might be 1.0117x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.7921+-0.2062            5.7319+-0.1030          might be 1.0105x faster
   put-by-val-machine-int                             2.8475+-0.0846            2.7999+-0.1243          might be 1.0170x faster
   rare-osr-exit-on-local                            15.8760+-0.1656     ?     15.9131+-0.2009        ?
   register-pressure-from-osr                        22.8750+-0.3007     ?     23.1867+-0.4980        ? might be 1.0136x slower
   setter                                             6.2863+-0.0495     !      6.4484+-0.1024        ! definitely 1.0258x slower
   simple-activation-demo                            26.7964+-0.3014     ?     27.0772+-0.4553        ? might be 1.0105x slower
   simple-getter-access                              12.5871+-0.3964           12.4681+-0.1912        
   simple-poly-call-nested                            9.2483+-0.1166            9.2277+-0.0368        
   simple-poly-call                                   1.6133+-0.0237            1.5958+-0.0270          might be 1.0110x faster
   sin-boolean                                       20.4530+-1.0942     ?     22.1926+-3.1111        ? might be 1.0851x slower
   singleton-scope                                   65.9832+-1.0132     ?     66.1077+-0.6935        ?
   sink-function                                     11.9629+-0.8669     ?     12.5684+-0.4330        ? might be 1.0506x slower
   sink-huge-activation                              19.8704+-0.9147           19.5890+-1.2236          might be 1.0144x faster
   sinkable-new-object-dag                           70.6824+-1.7638     ?     71.4422+-1.9753        ? might be 1.0107x slower
   sinkable-new-object-taken                         53.1531+-1.9906     ?     53.3200+-2.2725        ?
   sinkable-new-object                               39.6399+-1.0269           38.6961+-0.6519          might be 1.0244x faster
   slow-array-profile-convergence                     3.1747+-0.1572     ?      3.2240+-0.1682        ? might be 1.0155x slower
   slow-convergence                                   3.1019+-0.1669     ?      3.1609+-0.1814        ? might be 1.0190x slower
   slow-ternaries                                    19.7077+-0.2526           19.5313+-0.4564        
   sorting-benchmark                                 20.6677+-0.2503     ?     20.6979+-0.1902        ?
   sparse-conditional                                 1.4180+-0.0408     ?      1.4394+-0.0498        ? might be 1.0151x slower
   splice-to-remove                                  17.1901+-0.2324     ?     18.4045+-3.2279        ? might be 1.0706x slower
   string-char-code-at                               16.7569+-0.1786     ?     16.7877+-0.5414        ?
   string-concat-object                               2.3337+-0.0466     ?      2.3400+-0.0688        ?
   string-concat-pair-object                          2.4023+-0.1699            2.3085+-0.0624          might be 1.0406x faster
   string-concat-pair-simple                         12.5841+-0.5340           12.1740+-0.2867          might be 1.0337x faster
   string-concat-simple                              12.6101+-0.2765           12.5390+-0.2772        
   string-cons-repeat                                 7.7805+-0.3077     ?      8.0732+-0.3411        ? might be 1.0376x slower
   string-cons-tower                                  7.9575+-0.2224            7.7713+-0.1092          might be 1.0240x faster
   string-equality                                   19.8631+-0.3107     ?     20.0490+-0.2696        ?
   string-get-by-val-big-char                         7.6909+-0.3657            7.4323+-0.1183          might be 1.0348x faster
   string-get-by-val-out-of-bounds-insane             3.8356+-0.0885     ?      3.8972+-0.2041        ? might be 1.0161x slower
   string-get-by-val-out-of-bounds                    5.9840+-0.4640            5.6484+-0.1626          might be 1.0594x faster
   string-get-by-val                                  3.6405+-0.1466     ?      3.7180+-0.1146        ? might be 1.0213x slower
   string-hash                                        2.3118+-0.0614     ?      2.3334+-0.0353        ?
   string-long-ident-equality                        16.4626+-0.2904     ?     16.5360+-0.3868        ?
   string-out-of-bounds                              15.6328+-0.3761           15.4018+-0.3491          might be 1.0150x faster
   string-repeat-arith                               33.1757+-0.7956     ?     34.0533+-0.6198        ? might be 1.0265x slower
   string-sub                                        65.3438+-0.6901     ?     65.8079+-1.5648        ?
   string-test                                        3.1859+-0.0774     ?      3.2418+-0.0828        ? might be 1.0175x slower
   string-var-equality                               34.6545+-0.8156           34.4651+-0.3960        
   structure-hoist-over-transitions                   2.8162+-0.1323     ?      2.9274+-0.1836        ? might be 1.0395x slower
   substring-concat-weird                            41.2317+-0.4039           41.1480+-0.8042        
   substring-concat                                  44.8405+-1.0342     ?     45.3848+-2.4343        ? might be 1.0121x slower
   substring                                         47.6974+-0.8224     ?     47.7990+-0.9109        ?
   switch-char-constant                               3.0441+-0.1023            2.9958+-0.0630          might be 1.0161x faster
   switch-char                                        7.0216+-0.0626     ?      7.0327+-0.0729        ?
   switch-constant                                    9.1169+-0.5631            8.9387+-0.4020          might be 1.0199x faster
   switch-string-basic-big-var                       19.7640+-0.3005     ?     20.0629+-0.5830        ? might be 1.0151x slower
   switch-string-basic-big                           18.3227+-0.2168           18.2107+-0.4909        
   switch-string-basic-var                           16.2028+-0.2460     ?     16.2767+-0.4939        ?
   switch-string-basic                               14.9866+-0.1612     ?     15.1241+-0.3167        ?
   switch-string-big-length-tower-var                21.5937+-0.3433           21.3844+-0.4933        
   switch-string-length-tower-var                    16.3407+-0.3172     ?     16.3463+-0.2422        ?
   switch-string-length-tower                        13.5852+-0.2258           13.5474+-0.1919        
   switch-string-short                               13.4849+-0.1006     ?     13.7425+-0.1903        ? might be 1.0191x slower
   switch                                            13.0993+-0.1857     ?     13.6191+-0.9115        ? might be 1.0397x slower
   tear-off-arguments-simple                          3.6073+-0.1743            3.5605+-0.0808          might be 1.0131x faster
   tear-off-arguments                                 5.1315+-0.3473            4.8976+-0.1126          might be 1.0478x faster
   temporal-structure                                13.4235+-0.3409           13.1538+-0.2967          might be 1.0205x faster
   to-int32-boolean                                  14.4664+-0.2685     ?     14.5079+-0.1679        ?
   try-catch-get-by-val-cloned-arguments             15.1547+-1.7034           14.5126+-0.7952          might be 1.0442x faster
   try-catch-get-by-val-direct-arguments              6.4940+-0.3047     ?      6.7853+-0.5353        ? might be 1.0449x slower
   try-catch-get-by-val-scoped-arguments              7.4242+-0.0904     ?      7.5139+-0.2845        ? might be 1.0121x slower
   typed-array-get-set-by-val-profiling              36.4769+-0.4708     ?     37.3499+-2.3278        ? might be 1.0239x slower
   undefined-property-access                        361.3414+-8.8594          357.5765+-0.5500          might be 1.0105x faster
   undefined-test                                     3.2733+-0.0784     ?      3.4623+-0.1198        ? might be 1.0577x slower
   unprofiled-licm                                   23.2414+-0.2495           22.9490+-0.3642          might be 1.0127x faster
   varargs-call                                      16.0055+-0.1355     ?     16.0098+-0.3686        ?
   varargs-construct-inline                          28.5296+-0.9216           27.8645+-0.8314          might be 1.0239x faster
   varargs-construct                                 24.0386+-0.3610     ?     24.1823+-0.4964        ?
   varargs-inline                                     9.7306+-0.2039            9.7095+-0.1837        
   varargs-strict-mode                               10.7086+-0.1850     ?     10.9770+-0.4073        ? might be 1.0251x slower
   varargs                                           10.8767+-0.2900     ?     10.9339+-0.3295        ?
   weird-inlining-const-prop                          2.5784+-0.1479     ?      2.5962+-0.1706        ?

   &lt;geometric&gt;                                        8.8942+-0.0125     !      8.9268+-0.0154        ! definitely 1.0037x slower

                                                         r184563                   LazyNode                                     
AsmBench:
   bigfib.cpp                                       530.4476+-3.4576     ?    531.8476+-1.4115        ?
   cray.c                                           454.8730+-3.2171     ?    467.6731+-19.5239       ? might be 1.0281x slower
   dry.c                                            515.0510+-14.3997         511.9144+-18.9592       
   FloatMM.c                                        753.5271+-1.1324     ?    754.4245+-4.4353        ?
   gcc-loops.cpp                                   4396.5297+-11.4400    !   4421.1068+-10.9712       ! definitely 1.0056x slower
   n-body.c                                        1033.6262+-1.6029     ?   1037.2446+-7.2954        ?
   Quicksort.c                                      445.2131+-8.6740          444.7903+-1.7022        
   stepanov_container.cpp                          3972.4623+-5.5964     ?   3987.7805+-16.7840       ?
   Towers.c                                         270.2157+-2.9628          269.1699+-1.8659        

   &lt;geometric&gt;                                      837.7626+-3.2470     ?    840.8484+-7.4656        ? might be 1.0037x slower

                                                         r184563                   LazyNode                                     
CompressionBench:
   huffman                                          381.7283+-1.1493     !    391.5232+-2.1948        ! definitely 1.0257x slower
   arithmetic-simple                                382.1947+-0.6520     ?    382.8132+-1.1796        ?
   arithmetic-precise                               306.7580+-3.1386     ?    307.4093+-3.7184        ?
   arithmetic-complex-precise                       316.5529+-2.6948          315.8540+-2.3852        
   arithmetic-precise-order-0                       402.3017+-5.4393          399.2545+-3.9375        
   arithmetic-precise-order-1                       345.3787+-6.6243          343.1055+-1.9818        
   arithmetic-precise-order-2                       394.0601+-12.7991         390.4156+-2.0276        
   arithmetic-simple-order-1                        442.2996+-2.1746     ?    442.6624+-2.8598        ?
   arithmetic-simple-order-2                        494.0874+-1.9415     ?    499.6559+-6.9788        ? might be 1.0113x slower
   lz-string                                        321.8915+-1.9238     ?    325.0507+-5.2580        ?

   &lt;geometric&gt;                                      374.6833+-1.4244     ?    375.6390+-0.7370        ? might be 1.0026x slower

                                                         r184563                   LazyNode                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.4790+-0.1366     !     64.7893+-0.1069        ! definitely 1.0048x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096619</commentid>
    <comment_count>1</comment_count>
      <attachid>253532</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 10:47:11 -0700</bug_when>
    <thetext>Created attachment 253532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096623</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 11:00:27 -0700</bug_when>
    <thetext>It looks like your slow downs are within noise. One of the reasons why I hadn&apos;t added this capability previously is that our current benchmarks don&apos;t seem to need it. But it&apos;s an obviously desirable optimization and we don&apos;t limit ourselves to just those optimizations that make sense for existing benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096627</commentid>
    <comment_count>3</comment_count>
      <attachid>253532</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 11:08:24 -0700</bug_when>
    <thetext>Comment on attachment 253532
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGLazyNode.h:183
&gt; +    NodeType m_op:16;

It feels like you could make this be a pointer-width or 64-bit data structure. You only need to know the op for constants, and then there are only 3 choices. You sort of need 1 bit to determine if it&apos;s a node or frozen value, except that if the bit says &quot;Node&quot; then the op is superfluous. So you really have only four options for these two fields: Node, Frozen Value JS, Frozen Value Double, and Frozen Value Int52. This means that you only need two bits. You can always hide two bits in the low bits of a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096635</commentid>
    <comment_count>4</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 11:15:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; It looks like your slow downs are within noise. One of the reasons why I
&gt; hadn&apos;t added this capability previously is that our current benchmarks don&apos;t
&gt; seem to need it. But it&apos;s an obviously desirable optimization and we don&apos;t
&gt; limit ourselves to just those optimizations that make sense for existing
&gt; benchmarks.

Although the slowdown is relatively consistent throughout runs, I see your point. However, I was having doubts that this is really a desirable optimization. 

The really expensive operation here is the array allocation, not the access to the fields, so it may be a better place to handle this in object allocation sinking rather than CSE. Then we wouldn&apos;t have this in DFG mode, but then again, it is currently disabled in DFG for small blocks (see FIXME in DFGCSEPhase.cpp) already.

(In reply to comment #3)
&gt; Comment on attachment 253532 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253532&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGLazyNode.h:183
&gt; &gt; +    NodeType m_op:16;
&gt; 
&gt; It feels like you could make this be a pointer-width or 64-bit data
&gt; structure. You only need to know the op for constants, and then there are
&gt; only 3 choices. You sort of need 1 bit to determine if it&apos;s a node or frozen
&gt; value, except that if the bit says &quot;Node&quot; then the op is superfluous. So you
&gt; really have only four options for these two fields: Node, Frozen Value JS,
&gt; Frozen Value Double, and Frozen Value Int52. This means that you only need
&gt; two bits. You can always hide two bits in the low bits of a pointer.

Ah, I was not sure the &quot;you can always hide two bits in the low bits of a pointer&quot; thing was true for all the architectures we need to support, but this was my first idea as well. I will try changing that and see how it goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096721</commentid>
    <comment_count>5</comment_count>
      <attachid>253562</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 17:45:36 -0700</bug_when>
    <thetext>Created attachment 253562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096722</commentid>
    <comment_count>6</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 17:45:51 -0700</bug_when>
    <thetext>The benchmarks now look more reasonable to me.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-Mac-Pro (MacPro6,1).

VMs tested:
&quot;r184563&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc
&quot;LazyNode&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/LazyNode/Release/jsc

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

                                                         r184563                   LazyNode                                     
SunSpider:
   3d-cube                                            6.8330+-0.0475            6.7893+-0.0757        
   3d-morph                                           7.5724+-0.0526            7.5501+-0.0345        
   3d-raytrace                                        8.4367+-0.0825            8.3979+-0.0792        
   access-binary-trees                                2.9316+-0.0601            2.9127+-0.0458        
   access-fannkuch                                    7.7530+-0.1141            7.7306+-0.0592        
   access-nbody                                       3.9899+-0.3533            3.8789+-0.0217          might be 1.0286x faster
   access-nsieve                                      4.5555+-0.0956            4.5441+-0.0965        
   bitops-3bit-bits-in-byte                           2.0670+-0.0231     ?      2.0887+-0.0301        ? might be 1.0105x slower
   bitops-bits-in-byte                                4.6337+-0.0569     ?      4.6437+-0.0498        ?
   bitops-bitwise-and                                 2.9302+-0.3089            2.7927+-0.0409          might be 1.0492x faster
   bitops-nsieve-bits                                 4.0482+-0.0157     ?      4.0976+-0.1261        ? might be 1.0122x slower
   controlflow-recursive                              2.8971+-0.0903     ?      2.9312+-0.0260        ? might be 1.0118x slower
   crypto-aes                                         5.9521+-0.0994     ?      6.0031+-0.1951        ?
   crypto-md5                                         3.6882+-0.2026            3.4843+-0.0635          might be 1.0585x faster
   crypto-sha1                                        3.3398+-0.1591            3.2673+-0.0356          might be 1.0222x faster
   date-format-tofte                                 11.9284+-0.1458     !     12.3507+-0.1520        ! definitely 1.0354x slower
   date-format-xparb                                  7.4581+-0.0176     ?      7.5389+-0.1689        ? might be 1.0108x slower
   math-cordic                                        4.0256+-0.0378     ?      4.0315+-0.0362        ?
   math-partial-sums                                  7.1322+-0.1289     ?      7.2974+-0.6951        ? might be 1.0232x slower
   math-spectral-norm                                 2.5975+-0.0612     ?      2.6194+-0.0497        ?
   regexp-dna                                         9.3436+-0.1062     ?      9.3508+-0.2601        ?
   string-base64                                      6.0971+-0.0545     ?      6.2052+-0.0926        ? might be 1.0177x slower
   string-fasta                                       8.4609+-0.2305     ?      8.4733+-0.1045        ?
   string-tagcloud                                   11.9033+-0.1199     ?     12.1213+-0.2689        ? might be 1.0183x slower
   string-unpack-code                                27.6075+-0.2129     ^     26.8402+-0.2409        ^ definitely 1.0286x faster
   string-validate-input                              6.2998+-0.0648     ?      6.5498+-0.4903        ? might be 1.0397x slower

   &lt;arithmetic&gt;                                       6.7109+-0.0356     ?      6.7112+-0.0442        ? might be 1.0000x slower

                                                         r184563                   LazyNode                                     
LongSpider:
   3d-cube                                         1161.9515+-5.3153     ?   1162.6110+-6.7421        ?
   3d-morph                                        2081.8644+-2.2101     ?   2083.4186+-2.5086        ?
   3d-raytrace                                      964.9550+-2.9916     ?    966.9846+-2.1139        ?
   access-binary-trees                             1202.8700+-8.3168         1197.4823+-4.8449        
   access-fannkuch                                  444.1959+-12.2446         442.2732+-6.5401        
   access-nbody                                     841.8930+-0.8430          841.6598+-0.7912        
   access-nsieve                                    554.6010+-3.1358          554.0694+-4.2611        
   bitops-3bit-bits-in-byte                          62.2255+-0.5060     ?     62.5452+-0.7317        ?
   bitops-bits-in-byte                              124.4947+-2.0777          122.8069+-2.2689          might be 1.0137x faster
   bitops-nsieve-bits                               589.4498+-1.1096     ?    591.8050+-1.8722        ?
   controlflow-recursive                            656.6624+-9.4780          648.2872+-9.5573          might be 1.0129x faster
   crypto-aes                                       895.3399+-4.6306          890.9220+-4.1307        
   crypto-md5                                       705.8483+-9.2472     ?    712.1329+-3.1710        ?
   crypto-sha1                                      829.9058+-4.3537     ?    833.7055+-5.6857        ?
   date-format-tofte                                962.5408+-9.5784     ?    982.0764+-25.9311       ? might be 1.0203x slower
   date-format-xparb                               1017.5420+-37.9460    ?   1018.2288+-34.2323       ?
   hash-map                                         217.5200+-2.3129          217.3473+-2.1448        
   math-cordic                                      802.0189+-0.2334     ?    802.4769+-0.5320        ?
   math-partial-sums                                688.2911+-1.1601     ?    691.0188+-4.2164        ?
   math-spectral-norm                               765.8102+-1.3822     ?    766.3490+-1.5090        ?
   string-base64                                    479.8174+-1.4370     ?    480.4628+-0.5954        ?
   string-fasta                                     554.6161+-2.8639     ?    557.9010+-1.7465        ?
   string-tagcloud                                  267.6748+-1.6707     ?    272.0585+-4.5248        ? might be 1.0164x slower

   &lt;geometric&gt;                                      592.3036+-1.3539     ?    593.1580+-1.7368        ? might be 1.0014x slower

                                                         r184563                   LazyNode                                     
V8Spider:
   crypto                                            67.8765+-0.7304     ?     68.8577+-0.8869        ? might be 1.0145x slower
   deltablue                                         87.3304+-1.2137     ?     90.1341+-1.9642        ? might be 1.0321x slower
   earley-boyer                                      58.1275+-0.6450     ?     58.4982+-0.8771        ?
   raytrace                                          39.8321+-0.7011     ?     40.1393+-1.0207        ?
   regexp                                           105.9992+-0.4087          105.9331+-0.3641        
   richards                                          96.4194+-1.8344           95.6577+-1.8872        
   splay                                             47.5691+-1.5622     ?     48.7973+-1.3452        ? might be 1.0258x slower

   &lt;geometric&gt;                                       67.9211+-0.6396     ?     68.6701+-0.6668        ? might be 1.0110x slower

                                                         r184563                   LazyNode                                     
Octane:
   encrypt                                           0.30665+-0.00084          0.30644+-0.00055       
   decrypt                                           5.27116+-0.07426    ?     5.27748+-0.03298       ?
   deltablue                                x2       0.25798+-0.00107    ?     0.25878+-0.00135       ?
   earley                                            0.48901+-0.00268          0.48662+-0.00319       
   boyer                                             6.80707+-0.00748    ?     6.81116+-0.01100       ?
   navier-stokes                            x2       7.07389+-0.00782    ?     7.07641+-0.00851       ?
   raytrace                                 x2       1.59878+-0.04097          1.57785+-0.05824         might be 1.0133x faster
   richards                                 x2       0.15653+-0.00117    ?     0.15700+-0.00070       ?
   splay                                    x2       0.48774+-0.00735          0.48608+-0.00279       
   regexp                                   x2      40.25384+-0.25656         40.19403+-0.16775       
   pdfjs                                    x2      55.59378+-0.29521         55.33154+-0.79303       
   mandreel                                 x2      70.09515+-0.11387    ?    70.13248+-0.12331       ?
   gbemu                                    x2      58.79256+-0.83158    ?    59.55201+-0.29982       ? might be 1.0129x slower
   closure                                           0.80091+-0.00106    ?     0.80345+-0.00463       ?
   jquery                                           10.26737+-0.03920    ?    10.28985+-0.02669       ?
   box2d                                    x2      17.66133+-0.03012         17.63529+-0.07021       
   zlib                                     x2     522.48655+-1.13172    ?   524.45776+-1.31383       ?
   typescript                               x2    1067.58480+-10.78260      1066.17354+-19.13008      

   &lt;geometric&gt;                                       8.74833+-0.01868          8.74749+-0.02421         might be 1.0001x faster

                                                         r184563                   LazyNode                                     
Kraken:
   ai-astar                                          414.812+-9.575      ?     419.428+-8.245         ? might be 1.0111x slower
   audio-beat-detection                              140.779+-0.497      ?     141.033+-0.475         ?
   audio-dft                                         150.777+-0.943            150.622+-0.920         
   audio-fft                                         106.523+-0.222      ?     106.716+-0.309         ?
   audio-oscillator                                   98.138+-0.346             98.075+-0.247         
   imaging-darkroom                                  140.572+-0.735      ?     141.701+-2.695         ?
   imaging-desaturate                                 87.098+-0.387             86.543+-0.765         
   imaging-gaussian-blur                             147.334+-0.249      !     147.951+-0.356         ! definitely 1.0042x slower
   json-parse-financial                               61.215+-0.467             60.254+-1.002           might be 1.0159x faster
   json-stringify-tinderbox                           38.096+-0.110      !      38.592+-0.056         ! definitely 1.0130x slower
   stanford-crypto-aes                                76.438+-0.882      ?      77.711+-1.001         ? might be 1.0166x slower
   stanford-crypto-ccm                                67.328+-1.769      ?      68.584+-2.385         ? might be 1.0186x slower
   stanford-crypto-pbkdf2                            156.226+-1.359      ?     156.816+-0.813         ?
   stanford-crypto-sha256-iterative                   60.445+-1.163      ?      60.824+-1.035         ?

   &lt;arithmetic&gt;                                      124.699+-0.695      ?     125.346+-0.918         ? might be 1.0052x slower

                                                         r184563                   LazyNode                                     
JSRegress:
   abs-boolean                                        3.4178+-0.0279     ?      3.5374+-0.2717        ? might be 1.0350x slower
   adapt-to-double-divide                            21.6469+-0.4053     ?     21.6964+-0.3932        ?
   aliased-arguments-getbyval                         1.6172+-0.0669     ?      1.7248+-0.1007        ? might be 1.0665x slower
   allocate-big-object                                3.2719+-0.0663            3.2494+-0.0864        
   arguments-named-and-reflective                    14.6400+-0.2144     ?     14.7393+-0.2878        ?
   arguments-out-of-bounds                           19.0353+-0.1864     ?     19.0456+-0.1572        ?
   arguments-strict-mode                             13.6656+-0.2313     ?     13.7770+-0.1621        ?
   arguments                                         11.9782+-0.2766     ?     12.0895+-0.3368        ?
   arity-mismatch-inlining                            1.2065+-0.0369            1.1986+-0.0163        
   array-access-polymorphic-structure                 8.2675+-0.0966     ?      8.3089+-0.3119        ?
   array-nonarray-polymorhpic-access                 43.4279+-0.5183           43.0363+-0.8880        
   array-prototype-every                            110.6495+-0.5640     !    112.1020+-0.8531        ! definitely 1.0131x slower
   array-prototype-forEach                          108.1305+-0.8717     ?    108.3259+-0.4925        ?
   array-prototype-map                              120.0226+-0.5378     ?    120.5019+-1.4066        ?
   array-prototype-some                             110.5890+-0.5197     !    111.7489+-0.4914        ! definitely 1.0105x slower
   array-splice-contiguous                           59.4387+-0.6267     ^     55.4790+-0.6437        ^ definitely 1.0714x faster
   array-with-double-add                              5.2653+-0.0353     ?      5.3223+-0.0315        ? might be 1.0108x slower
   array-with-double-increment                        4.2139+-0.0511     ?      4.2969+-0.0512        ? might be 1.0197x slower
   array-with-double-mul-add                          6.5074+-0.0562     ?      6.5231+-0.0328        ?
   array-with-double-sum                              4.3350+-0.1536            4.2725+-0.0295          might be 1.0146x faster
   array-with-int32-add-sub                           8.5612+-0.0292            8.5173+-0.0425        
   array-with-int32-or-double-sum                     4.5181+-0.3556            4.3278+-0.0428          might be 1.0440x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     39.1629+-0.2546           39.1202+-0.2436        
   ArrayBuffer-DataView-alloc-long-lived             17.6190+-1.0137           17.0061+-0.2081          might be 1.0360x faster
   ArrayBuffer-Int32Array-byteOffset                  5.0165+-0.0408     ?      5.0182+-0.0463        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     40.5541+-0.7804           40.2592+-0.3610        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     29.0138+-0.9899           28.1208+-1.0348          might be 1.0318x faster
   ArrayBuffer-Int8Array-alloc-long-lived            16.5705+-0.6558           16.0205+-0.2552          might be 1.0343x faster
   ArrayBuffer-Int8Array-alloc                       13.5181+-0.3285           13.4212+-0.1096        
   asmjs_bool_bug                                     9.6171+-0.2766     ?      9.6233+-0.1310        ?
   assign-custom-setter-polymorphic                   4.2500+-0.0589     ^      4.0730+-0.0610        ^ definitely 1.0435x faster
   assign-custom-setter                               5.8684+-0.0515     ^      5.4482+-0.0204        ^ definitely 1.0771x faster
   basic-set                                         10.9179+-0.3142     ?     11.0135+-0.1218        ?
   big-int-mul                                        5.1318+-0.0258     ?      5.1331+-0.0331        ?
   boolean-test                                       3.9740+-0.0437     ?      4.0060+-0.0609        ?
   branch-fold                                        4.9384+-0.2293            4.8723+-0.0739          might be 1.0136x faster
   branch-on-string-as-boolean                       23.7963+-0.4765           23.6012+-0.1491        
   by-val-generic                                    10.1225+-0.2097           10.0118+-0.2062          might be 1.0111x faster
   call-spread-apply                                 37.5716+-0.3900     ?     37.7244+-0.8922        ?
   call-spread-call                                  31.9985+-0.2576     ?     32.4575+-1.0779        ? might be 1.0143x slower
   captured-assignments                               0.5986+-0.0217     ?      0.6047+-0.0297        ? might be 1.0103x slower
   cast-int-to-double                                 6.6938+-0.0223     ?      6.7228+-0.0185        ?
   cell-argument                                     10.8730+-0.3684           10.7869+-0.2780        
   cfg-simplify                                       3.6572+-0.0939     ?      3.6809+-0.0799        ?
   chain-getter-access                               11.6818+-0.1714     ?     11.7829+-0.0982        ?
   cmpeq-obj-to-obj-other                            11.7673+-0.0503     !     12.3144+-0.0685        ! definitely 1.0465x slower
   constant-test                                      6.3400+-0.0250     ?      6.3532+-0.0502        ?
   create-lots-of-functions                          13.7738+-0.3406     ?     14.1885+-0.5074        ? might be 1.0301x slower
   DataView-custom-properties                        45.6550+-0.2679     ?     46.3944+-0.8113        ? might be 1.0162x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.7536+-0.0403            0.7484+-0.0392        
   delay-tear-off-arguments-strictmode               17.4132+-0.0640     !     17.9818+-0.2241        ! definitely 1.0326x slower
   deltablue-varargs                                264.9302+-1.1502     !    270.0520+-1.4848        ! definitely 1.0193x slower
   destructuring-arguments                           21.9332+-0.3271           21.5148+-0.2426          might be 1.0194x faster
   destructuring-swap                                 6.5934+-0.2931            6.5222+-0.0837          might be 1.0109x faster
   direct-arguments-getbyval                          1.6501+-0.0638     ?      1.7028+-0.0456        ? might be 1.0319x slower
   div-boolean-double                                 6.6481+-0.0117     ?      6.6491+-0.0207        ?
   div-boolean                                        9.9985+-0.0152            9.9870+-0.0189        
   double-get-by-val-out-of-bounds                    5.6305+-0.1244     ^      5.4458+-0.0412        ^ definitely 1.0339x faster
   double-pollution-getbyval                         11.3972+-0.0211     ?     11.4085+-0.0468        ?
   double-pollution-putbyoffset                       5.4288+-0.0413            5.4013+-0.0539        
   double-to-int32-typed-array-no-inline              2.8802+-0.0498     ?      2.8831+-0.0441        ?
   double-to-int32-typed-array                        2.5276+-0.0247     ?      2.5642+-0.0462        ? might be 1.0145x slower
   double-to-uint32-typed-array-no-inline             2.9792+-0.0403     ?      2.9823+-0.0659        ?
   double-to-uint32-typed-array                       2.6029+-0.0345     ?      2.6449+-0.0430        ? might be 1.0161x slower
   elidable-new-object-dag                           51.7945+-0.4311           51.0295+-0.8366          might be 1.0150x faster
   elidable-new-object-roflcopter                    53.3695+-0.7798     ?     53.4487+-0.3928        ?
   elidable-new-object-then-call                     47.9443+-0.9412           47.3486+-0.2105          might be 1.0126x faster
   elidable-new-object-tree                          53.8595+-0.6631     ?     54.2602+-0.7897        ?
   empty-string-plus-int                              6.8983+-0.0860            6.7976+-0.0758          might be 1.0148x faster
   emscripten-cube2hash                              48.6697+-0.3178     ?     48.7420+-0.4111        ?
   exit-length-on-plain-object                       17.4682+-0.4347           17.3930+-0.2001        
   external-arguments-getbyval                        1.6447+-0.0552     ?      1.6790+-0.1082        ? might be 1.0209x slower
   external-arguments-putbyval                        3.0164+-0.0602            2.9827+-0.0718          might be 1.0113x faster
   fixed-typed-array-storage-var-index                1.7178+-0.1120            1.6611+-0.0184          might be 1.0341x faster
   fixed-typed-array-storage                          1.2415+-0.0281            1.2140+-0.0573          might be 1.0226x faster
   Float32Array-matrix-mult                           5.9869+-0.4005            5.8672+-0.1292          might be 1.0204x faster
   Float32Array-to-Float64Array-set                  70.4899+-1.4393     !     75.2247+-1.0956        ! definitely 1.0672x slower
   Float64Array-alloc-long-lived                     82.9788+-1.0723           81.8792+-0.7423          might be 1.0134x faster
   Float64Array-to-Int16Array-set                    91.2767+-1.0088           91.0976+-0.6499        
   fold-double-to-int                                18.3979+-0.0628     ?     18.5338+-0.2156        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0481+-0.2092     ?     10.2639+-0.3981        ? might be 1.0215x slower
   fold-get-by-id-to-multi-get-by-offset              8.9539+-0.5169            8.5924+-0.1266          might be 1.0421x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.4019+-0.9509     ?      8.7550+-0.1309        ? might be 1.0420x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.9935+-0.5052     ?      8.4701+-0.5009        ? might be 1.0596x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.8555+-0.0826     ?      7.9129+-0.1025        ?
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.9308+-0.5261            5.7355+-0.6792          might be 1.0341x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     13.3002+-1.4170           12.7639+-1.1112          might be 1.0420x faster
   fold-put-by-id-to-multi-put-by-offset              8.4982+-0.4101     ?      8.5559+-0.4887        ?
   fold-put-structure                                 5.7272+-1.4124            5.1464+-0.0285          might be 1.1129x faster
   for-of-iterate-array-entries                       5.7653+-0.0583     ?      5.8003+-0.0443        ?
   for-of-iterate-array-keys                          4.7262+-0.1600            4.6809+-0.0607        
   for-of-iterate-array-values                        4.6523+-0.0512            4.6431+-0.0562        
   fround                                            26.2901+-0.4636           26.0082+-0.2678          might be 1.0108x faster
   ftl-library-inlining-dataview                     87.1365+-0.2125     ?     89.8865+-3.2682        ? might be 1.0316x slower
   ftl-library-inlining                              97.0782+-23.4284          88.4270+-1.3689          might be 1.0978x faster
   function-dot-apply                                 2.8178+-0.0647            2.7952+-0.0374        
   function-test                                      3.6933+-0.0828            3.6639+-0.0328        
   function-with-eval                               129.5402+-0.8796          129.5074+-1.4474        
   gcse-poly-get-less-obvious                        25.8741+-3.3631     ?     26.5553+-4.0886        ? might be 1.0263x slower
   gcse-poly-get                                     28.2900+-6.5771     ?     35.7469+-5.3485        ? might be 1.2636x slower
   gcse                                               5.5909+-0.0234     !      5.6370+-0.0222        ! definitely 1.0083x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.5170+-0.0666     ?      3.5438+-0.0453        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.8767+-0.0637     ?      7.9238+-0.1796        ?
   get-by-id-chain-from-try-block                     8.6834+-0.0768            8.6726+-0.0197        
   get-by-id-check-structure-elimination              6.7995+-0.2554     ?      6.9347+-0.4786        ? might be 1.0199x slower
   get-by-id-proto-or-self                           24.5545+-2.4540     ?     26.3953+-3.1151        ? might be 1.0750x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.7854+-0.0367     ?      3.8003+-0.0138        ?
   get-by-id-self-or-proto                           24.8542+-2.2763           23.9414+-0.7254          might be 1.0381x faster
   get-by-val-out-of-bounds                           5.5529+-0.1133            5.4740+-0.2117          might be 1.0144x faster
   get_callee_monomorphic                             3.2838+-0.1014            3.2363+-0.0850          might be 1.0147x faster
   get_callee_polymorphic                             4.5261+-0.0545     ?      4.5706+-0.0716        ?
   getter-no-activation                               6.1568+-0.0387            6.1322+-0.0218        
   getter-richards                                  120.8604+-2.2347          120.0249+-0.3281        
   getter                                             7.1800+-0.5884            6.8560+-0.0321          might be 1.0473x faster
   global-var-const-infer-fire-from-opt               1.3258+-0.1359            1.3117+-0.1331          might be 1.0107x faster
   global-var-const-infer                             1.1547+-0.1180     ?      1.2270+-0.2305        ? might be 1.0625x slower
   HashMap-put-get-iterate-keys                      30.2739+-0.1594     ?     30.7863+-0.4618        ? might be 1.0169x slower
   HashMap-put-get-iterate                           29.8547+-0.2376     ?     30.0815+-0.2056        ?
   HashMap-string-put-get-iterate                    34.1463+-0.2058           34.0638+-0.6473        
   hoist-make-rope                                   15.1246+-1.1770           15.0092+-0.9513        
   hoist-poly-check-structure-effectful-loop   
                                                      6.4216+-0.0330            6.4071+-0.0169        
   hoist-poly-check-structure                         4.7111+-0.0594     ?      4.7195+-0.0432        ?
   imul-double-only                                   9.6722+-0.5216     ?     10.0003+-0.2220        ? might be 1.0339x slower
   imul-int-only                                     12.0585+-0.4237     ?     12.3975+-0.0971        ? might be 1.0281x slower
   imul-mixed                                         9.9933+-0.0642            9.8108+-0.4585          might be 1.0186x faster
   in-four-cases                                     28.2149+-0.1655           28.1479+-0.2717        
   in-one-case-false                                 14.1362+-0.1318           14.0555+-0.0266        
   in-one-case-true                                  14.0441+-0.0474     ?     14.1278+-0.1765        ?
   in-two-cases                                      15.0060+-0.3169           14.8589+-0.0297        
   indexed-properties-in-objects                      3.6694+-0.0286     !      3.7391+-0.0266        ! definitely 1.0190x slower
   infer-closure-const-then-mov-no-inline             5.0638+-0.0615     ?      5.1212+-0.0635        ? might be 1.0113x slower
   infer-closure-const-then-mov                      25.7027+-0.3471     ^     24.8832+-0.2222        ^ definitely 1.0329x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.8173+-0.0569           15.7753+-0.0493        
   infer-closure-const-then-put-to-scope             28.7289+-1.0830     ?     29.5537+-1.1649        ? might be 1.0287x slower
   infer-closure-const-then-reenter-no-inline   
                                                     76.2496+-0.7295           76.0774+-0.1945        
   infer-closure-const-then-reenter                  28.9155+-0.9337     ?     29.1068+-1.0114        ?
   infer-constant-global-property                     4.5920+-0.0431            4.5469+-0.0237        
   infer-constant-property                            3.5194+-0.0433            3.4964+-0.0312        
   infer-one-time-closure-ten-vars                   15.7497+-0.1616     ?     15.8020+-0.1837        ?
   infer-one-time-closure-two-vars                   15.1790+-0.1230           15.1663+-0.0882        
   infer-one-time-closure                            15.1734+-0.1440           15.1131+-0.1264        
   infer-one-time-deep-closure                       26.8579+-0.0954     ?     26.8690+-0.2206        ?
   inline-arguments-access                            5.2370+-0.1311     ?      5.2684+-0.1310        ?
   inline-arguments-aliased-access                    5.1921+-0.0856     ?      5.2430+-0.1705        ?
   inline-arguments-local-escape                      5.2244+-0.0961     ?      5.4329+-0.2107        ? might be 1.0399x slower
   inline-get-scoped-var                              6.0309+-0.0896     ?      6.0719+-0.0395        ?
   inlined-put-by-id-transition                      13.9208+-0.4716     ?     14.0368+-0.7257        ?
   int-or-other-abs-then-get-by-val                   6.2753+-0.0273     ?      6.2992+-0.0335        ?
   int-or-other-abs-zero-then-get-by-val             23.1145+-0.2727     ^     22.7577+-0.0463        ^ definitely 1.0157x faster
   int-or-other-add-then-get-by-val                   5.4733+-0.0547     ?      5.4962+-0.0420        ?
   int-or-other-add                                   6.7928+-0.0189     ?      7.0024+-0.2975        ? might be 1.0309x slower
   int-or-other-div-then-get-by-val                   5.4895+-0.1899            5.4341+-0.0605          might be 1.0102x faster
   int-or-other-max-then-get-by-val                   5.4958+-0.0647            5.4895+-0.0276        
   int-or-other-min-then-get-by-val                   5.6053+-0.0377     ?      5.6692+-0.0448        ? might be 1.0114x slower
   int-or-other-mod-then-get-by-val                   5.1174+-0.0382     ?      5.1525+-0.0462        ?
   int-or-other-mul-then-get-by-val                   5.0467+-0.1059            5.0227+-0.1783        
   int-or-other-neg-then-get-by-val                   6.0785+-0.0301     ?      6.0852+-0.0253        ?
   int-or-other-neg-zero-then-get-by-val             23.3896+-0.6033           22.6015+-0.1930          might be 1.0349x faster
   int-or-other-sub-then-get-by-val                   5.5179+-0.0301     ?      5.5251+-0.0637        ?
   int-or-other-sub                                   4.5503+-0.0433     ?      4.5719+-0.0243        ?
   int-overflow-local                                 5.6782+-0.1892            5.6104+-0.0279          might be 1.0121x faster
   Int16Array-alloc-long-lived                       59.0301+-1.0045     ?     59.4024+-0.8445        ?
   Int16Array-bubble-sort-with-byteLength            25.6048+-0.7099           25.2126+-0.1811          might be 1.0156x faster
   Int16Array-bubble-sort                            25.5755+-0.1764           25.3767+-0.1771        
   Int16Array-load-int-mul                            1.9828+-0.0154     ?      2.0617+-0.1315        ? might be 1.0398x slower
   Int16Array-to-Int32Array-set                      68.7907+-0.1517     !     75.7459+-1.2658        ! definitely 1.1011x slower
   Int32Array-alloc-large                            23.5767+-0.4530     ?     24.1181+-0.8341        ? might be 1.0230x slower
   Int32Array-alloc-long-lived                       64.8066+-0.6461     ?     64.9242+-0.6426        ?
   Int32Array-alloc                                   3.4151+-0.0537     ?      3.4602+-0.1573        ? might be 1.0132x slower
   Int32Array-Int8Array-view-alloc                    8.3676+-0.1697     ?      8.4189+-0.2327        ?
   int52-spill                                        7.4385+-0.0853            7.4311+-0.1925        
   Int8Array-alloc-long-lived                        53.4456+-0.8696           53.3463+-0.6025        
   Int8Array-load-with-byteLength                     4.3680+-0.0827            4.3403+-0.0246        
   Int8Array-load                                     4.4198+-0.1686            4.3525+-0.0388          might be 1.0155x faster
   integer-divide                                    14.9135+-0.6684           14.6649+-0.0424          might be 1.0170x faster
   integer-modulo                                     2.8712+-0.1059            2.7336+-0.0562          might be 1.0503x faster
   is-boolean-fold-tricky                             5.8630+-0.1173            5.8021+-0.0635          might be 1.0105x faster
   is-boolean-fold                                    3.6954+-0.0714            3.6677+-0.0551        
   is-function-fold-tricky-internal-function   
                                                     15.5893+-0.3050     ?     15.7194+-0.3219        ?
   is-function-fold-tricky                            5.9832+-0.0872            5.8883+-0.0406          might be 1.0161x faster
   is-function-fold                                   3.7282+-0.0266     ^      3.6650+-0.0359        ^ definitely 1.0173x faster
   is-number-fold-tricky                              5.8249+-0.1447            5.7584+-0.0539          might be 1.0115x faster
   is-number-fold                                     3.7428+-0.1638            3.6689+-0.1149          might be 1.0202x faster
   is-object-or-null-fold-functions                   3.8141+-0.0429            3.7410+-0.0437          might be 1.0196x faster
   is-object-or-null-fold-less-tricky                 5.9461+-0.0724            5.8573+-0.0380          might be 1.0152x faster
   is-object-or-null-fold-tricky                      8.4096+-0.0225     ?      8.4177+-0.0248        ?
   is-object-or-null-fold                             3.7435+-0.0288     ^      3.6603+-0.0227        ^ definitely 1.0227x faster
   is-object-or-null-trickier-function                6.0979+-0.1338            6.0652+-0.1052        
   is-object-or-null-trickier-internal-function   
                                                     16.6398+-0.6198           16.2546+-0.0873          might be 1.0237x faster
   is-object-or-null-tricky-function                  6.0118+-0.0813            5.9920+-0.0880        
   is-object-or-null-tricky-internal-function   
                                                     12.2428+-0.0748     ^     11.9421+-0.2017        ^ definitely 1.0252x faster
   is-string-fold-tricky                              5.8442+-0.2663            5.7467+-0.0280          might be 1.0170x faster
   is-string-fold                                     3.6916+-0.0318     ?      3.7028+-0.2215        ?
   is-undefined-fold-tricky                           4.8013+-0.0510     ?      4.8030+-0.0398        ?
   is-undefined-fold                                  3.6965+-0.0397            3.6498+-0.0430          might be 1.0128x faster
   large-int-captured                                 5.5909+-0.0471            5.5649+-0.0707        
   large-int-neg                                     21.2419+-0.1875     ?     21.3685+-0.2174        ?
   large-int                                         19.8191+-0.2484           19.6876+-0.3349        
   load-varargs-elimination                          31.9802+-0.3401           31.8584+-0.4870        
   logical-not                                        5.9165+-0.0641     ?      5.9223+-0.0802        ?
   lots-of-fields                                    15.8314+-0.1370     !     16.1685+-0.1085        ! definitely 1.0213x slower
   make-indexed-storage                               3.8553+-0.2698     ?      3.9745+-0.0554        ? might be 1.0309x slower
   make-rope-cse                                      5.0179+-0.1236     ?      5.0393+-0.0899        ?
   marsaglia-larger-ints                             52.3082+-0.3089           52.2228+-0.1798        
   marsaglia-osr-entry                               29.3654+-0.1835     ?     29.7000+-0.8300        ? might be 1.0114x slower
   max-boolean                                        3.1656+-0.0124     ?      3.2528+-0.0822        ? might be 1.0275x slower
   method-on-number                                  23.8441+-0.7261     ?     29.5600+-19.3139       ? might be 1.2397x slower
   min-boolean                                        3.1944+-0.0445     ?      3.2141+-0.0470        ?
   minus-boolean-double                               4.0841+-0.0142     ?      4.1081+-0.0303        ?
   minus-boolean                                      3.0257+-0.0339            3.0178+-0.0291        
   misc-strict-eq                                    53.6580+-4.9015           51.4336+-0.9950          might be 1.0432x faster
   mod-boolean-double                                14.4269+-0.5363           14.2465+-0.2487          might be 1.0127x faster
   mod-boolean                                       10.0630+-0.0553           10.0528+-0.0246        
   mul-boolean-double                                 4.7902+-0.0266     ?      4.7937+-0.0269        ?
   mul-boolean                                        3.7470+-0.0954            3.7119+-0.0168        
   neg-boolean                                        4.0959+-0.0279     ?      4.1199+-0.0395        ?
   negative-zero-divide                               0.4989+-0.0231     ?      0.5018+-0.0188        ?
   negative-zero-modulo                               0.4793+-0.0185     ?      0.5010+-0.0215        ? might be 1.0452x slower
   negative-zero-negate                               0.4690+-0.0230     ?      0.4806+-0.0114        ? might be 1.0247x slower
   nested-function-parsing                           48.5363+-0.8706           48.0498+-0.5974          might be 1.0101x faster
   new-array-buffer-dead                            124.3710+-0.1684     ?    125.0990+-0.5950        ?
   new-array-buffer-push                              8.1161+-0.1503     ?      8.1548+-0.2097        ?
   new-array-dead                                    22.8233+-0.4152     ?     22.9662+-0.6616        ?
   new-array-push                                     4.7162+-0.1538            4.6766+-0.1641        
   no-inline-constructor                             48.6538+-0.3996     ?     48.8577+-0.8361        ?
   number-test                                        3.9536+-0.0534            3.9505+-0.0458        
   object-closure-call                                7.1565+-0.0257            7.1205+-0.0533        
   object-test                                        3.5977+-0.0422     !      3.7401+-0.0157        ! definitely 1.0396x slower
   obvious-sink-pathology-taken                     151.9638+-1.0300     ?    154.8279+-4.3800        ? might be 1.0188x slower
   obvious-sink-pathology                           142.6272+-0.5292     ?    144.0563+-1.5477        ? might be 1.0100x slower
   obviously-elidable-new-object                     42.4400+-0.5864           41.8339+-0.5698          might be 1.0145x faster
   plus-boolean-arith                                 3.2177+-0.0265     ?      3.2719+-0.0381        ? might be 1.0168x slower
   plus-boolean-double                                4.1126+-0.0272     ?      4.1251+-0.0261        ?
   plus-boolean                                       3.0875+-0.0165     ?      3.0990+-0.0382        ?
   poly-chain-access-different-prototypes-simple   
                                                      4.2643+-0.0111            4.2527+-0.0170        
   poly-chain-access-different-prototypes             3.3171+-0.0342     ?      3.3288+-0.0271        ?
   poly-chain-access-simpler                          4.2353+-0.0301     ?      4.2480+-0.0185        ?
   poly-chain-access                                  3.3326+-0.0186     ?      3.4162+-0.1794        ? might be 1.0251x slower
   poly-stricteq                                     76.9017+-0.0738     !     78.3192+-0.6174        ! definitely 1.0184x slower
   polymorphic-array-call                             1.8665+-0.1237            1.8300+-0.0965          might be 1.0200x faster
   polymorphic-get-by-id                              3.9993+-0.0441     ?      4.0067+-0.0818        ?
   polymorphic-put-by-id                             42.2686+-2.1068     ?     42.5972+-0.7743        ?
   polymorphic-structure                             19.5071+-0.0344     ?     19.5299+-0.0413        ?
   polyvariant-monomorphic-get-by-id                 10.9764+-0.0586           10.9484+-0.0590        
   proto-getter-access                               11.5285+-0.1299     ?     11.6434+-0.0294        ?
   put-by-id-replace-and-transition                  11.5658+-0.2340           11.3685+-0.1009          might be 1.0174x faster
   put-by-id-slightly-polymorphic                     3.6507+-0.0368     ?      3.6757+-0.0469        ?
   put-by-id                                         15.0367+-0.2718           14.9181+-0.2791        
   put-by-val-direct                                  0.4897+-0.0287     ?      0.5253+-0.0233        ? might be 1.0729x slower
   put-by-val-large-index-blank-indexing-type   
                                                      7.0842+-0.1612     ?      7.3259+-0.3096        ? might be 1.0341x slower
   put-by-val-machine-int                             3.2456+-0.0671     ?      3.2548+-0.1065        ?
   rare-osr-exit-on-local                            19.2250+-0.1799     ?     19.5282+-0.1316        ? might be 1.0158x slower
   register-pressure-from-osr                        28.0703+-0.2190     ?     28.5490+-0.7942        ? might be 1.0171x slower
   setter                                             6.9284+-0.0479     !      7.1263+-0.0574        ! definitely 1.0286x slower
   simple-activation-demo                            33.2515+-0.3400           33.1623+-0.1814        
   simple-getter-access                              15.1386+-0.0500     ?     15.2144+-0.1706        ?
   simple-poly-call-nested                           10.2329+-0.0240           10.2185+-0.0500        
   simple-poly-call                                   1.7954+-0.0517            1.7457+-0.0313          might be 1.0285x faster
   sin-boolean                                       24.4171+-0.3621     ?     24.5527+-0.1897        ?
   singleton-scope                                   83.1360+-0.1327     ?     83.3712+-0.6863        ?
   sink-function                                     14.7224+-1.0895           14.4497+-0.2967          might be 1.0189x faster
   sink-huge-activation                              23.5628+-0.5642     ?     23.9941+-1.2615        ? might be 1.0183x slower
   sinkable-new-object-dag                           85.6666+-0.5387     ?     85.7819+-1.1813        ?
   sinkable-new-object-taken                         65.4674+-3.3556           64.6522+-0.7701          might be 1.0126x faster
   sinkable-new-object                               46.8706+-0.3939           46.5918+-0.5245        
   slow-array-profile-convergence                     3.8215+-0.0632            3.7788+-0.0631          might be 1.0113x faster
   slow-convergence                                   3.6740+-0.0344            3.6560+-0.0898        
   slow-ternaries                                    24.0927+-0.6661     ?     24.9206+-2.7180        ? might be 1.0344x slower
   sorting-benchmark                                 25.5977+-0.1672     ?     25.9930+-0.7025        ? might be 1.0154x slower
   sparse-conditional                                 1.5655+-0.0174     ?      1.5793+-0.0466        ?
   splice-to-remove                                  21.2351+-0.2544     ?     21.5823+-0.4665        ? might be 1.0163x slower
   string-char-code-at                               20.9056+-0.6758           20.6612+-0.1069          might be 1.0118x faster
   string-concat-object                               2.8643+-0.0574     ?      2.9178+-0.0936        ? might be 1.0187x slower
   string-concat-pair-object                          2.9680+-0.2600            2.8417+-0.0716          might be 1.0444x faster
   string-concat-pair-simple                         14.8753+-1.5929           14.1702+-0.8769          might be 1.0498x faster
   string-concat-simple                              15.1978+-0.6104           14.5433+-0.3324          might be 1.0450x faster
   string-cons-repeat                                 9.4634+-0.0607            9.4489+-0.1208        
   string-cons-tower                                  9.6431+-0.2438            9.6029+-0.1410        
   string-equality                                   24.8175+-0.1529           24.7917+-0.0961        
   string-get-by-val-big-char                         8.9915+-0.0458     ?      9.0610+-0.0577        ?
   string-get-by-val-out-of-bounds-insane             4.6376+-0.0336     ?      4.6907+-0.1995        ? might be 1.0114x slower
   string-get-by-val-out-of-bounds                    6.8300+-0.0506            6.7903+-0.0451        
   string-get-by-val                                  4.2278+-0.0359     !      4.4092+-0.0259        ! definitely 1.0429x slower
   string-hash                                        2.6456+-0.0222     ?      2.6840+-0.0655        ? might be 1.0145x slower
   string-long-ident-equality                        20.5313+-0.6145           20.1960+-0.0782          might be 1.0166x faster
   string-out-of-bounds                              18.9816+-0.2019     ?     19.0207+-0.1226        ?
   string-repeat-arith                               41.7592+-0.5986           41.6182+-1.3396        
   string-sub                                        83.8815+-0.4874           83.4780+-1.0426        
   string-test                                        3.7260+-0.0431     ?      3.8098+-0.0454        ? might be 1.0225x slower
   string-var-equality                               43.7410+-1.1444           43.4773+-0.2341        
   structure-hoist-over-transitions                   3.3305+-0.0805            3.3282+-0.0532        
   substring-concat-weird                            51.4589+-0.9806           50.9591+-0.9928        
   substring-concat                                  55.2887+-0.8885           55.1915+-1.1150        
   substring                                         60.2952+-0.8172           59.4897+-0.7374          might be 1.0135x faster
   switch-char-constant                               3.4941+-0.0307            3.4648+-0.0238        
   switch-char                                        7.8262+-0.0982            7.7703+-0.0378        
   switch-constant                                   10.4458+-0.5210           10.2229+-0.2969          might be 1.0218x faster
   switch-string-basic-big-var                       24.3027+-0.7929     ?     24.7189+-0.3592        ? might be 1.0171x slower
   switch-string-basic-big                           22.5632+-0.5683     ?     22.6308+-0.2703        ?
   switch-string-basic-var                           19.8407+-0.0696     ?     20.0023+-0.2554        ?
   switch-string-basic                               18.5839+-0.1781           18.5380+-0.1688        
   switch-string-big-length-tower-var                26.2974+-0.1940     ?     26.3628+-0.2166        ?
   switch-string-length-tower-var                    19.9970+-0.0897     ?     20.0816+-0.1668        ?
   switch-string-length-tower                        16.9006+-0.2831           16.8457+-0.1869        
   switch-string-short                               16.8516+-0.2119           16.7914+-0.0555        
   switch                                            15.8186+-0.2731           15.7939+-0.3511        
   tear-off-arguments-simple                          4.1812+-0.1039            4.1437+-0.0709        
   tear-off-arguments                                 5.6383+-0.0441     ?      5.6606+-0.1382        ?
   temporal-structure                                15.9070+-0.0901     ?     16.1375+-0.6706        ? might be 1.0145x slower
   to-int32-boolean                                  18.1982+-0.6467           17.9156+-0.0249          might be 1.0158x faster
   try-catch-get-by-val-cloned-arguments             18.1180+-0.2620     ?     18.1214+-0.7159        ?
   try-catch-get-by-val-direct-arguments              8.1823+-0.2795            8.0313+-0.0540          might be 1.0188x faster
   try-catch-get-by-val-scoped-arguments              9.4299+-0.2001            9.4243+-0.2413        
   typed-array-get-set-by-val-profiling              43.7402+-0.6870     ?     43.8950+-0.2135        ?
   undefined-property-access                        458.5068+-0.5300          458.3129+-0.4188        
   undefined-test                                     3.8577+-0.0371     !      4.0616+-0.1455        ! definitely 1.0529x slower
   unprofiled-licm                                   28.9672+-0.1748     ?     29.3149+-0.9377        ? might be 1.0120x slower
   varargs-call                                      19.2457+-0.1442     ?     19.4087+-0.1699        ?
   varargs-construct-inline                          34.0194+-0.2331           33.8854+-0.2765        
   varargs-construct                                 29.6324+-0.6259           29.2509+-0.1795          might be 1.0130x faster
   varargs-inline                                    11.9844+-0.0217           11.9505+-0.0418        
   varargs-strict-mode                               13.1998+-0.0473           13.1701+-0.0610        
   varargs                                           13.1772+-0.0230     ?     13.2360+-0.0601        ?
   weird-inlining-const-prop                          2.8369+-0.1176     ?      2.8580+-0.2380        ?

   &lt;geometric&gt;                                       10.6101+-0.0117     ?     10.6266+-0.0156        ? might be 1.0016x slower

                                                         r184563                   LazyNode                                     
AsmBench:
   bigfib.cpp                                       658.2194+-1.4846     ?    658.5655+-1.3844        ?
   cray.c                                           574.0680+-3.6023     ?    576.1148+-5.2839        ?
   dry.c                                            669.6808+-12.2099    ?    670.5153+-13.8433       ?
   FloatMM.c                                        971.5382+-2.9349          969.2887+-1.0430        
   gcc-loops.cpp                                   5673.2465+-24.8511        5670.9194+-15.3463       
   n-body.c                                        1328.1307+-1.3362         1327.5536+-1.0298        
   Quicksort.c                                      570.3781+-0.6510     ?    570.7939+-1.0796        ?
   stepanov_container.cpp                          5053.1656+-18.1899    ?   5058.5546+-27.7210       ?
   Towers.c                                         344.6159+-0.3819          344.4612+-0.2160        

   &lt;geometric&gt;                                     1070.0763+-2.3627     ?   1070.4891+-3.0362        ? might be 1.0004x slower

                                                         r184563                   LazyNode                                     
CompressionBench:
   huffman                                          507.1145+-0.6969     ^    502.7729+-0.4264        ^ definitely 1.0086x faster
   arithmetic-simple                                486.0492+-0.5873     ?    486.4934+-0.4562        ?
   arithmetic-precise                               387.1558+-2.1238          385.4702+-2.0351        
   arithmetic-complex-precise                       400.2619+-1.8023     ?    400.4527+-2.7019        ?
   arithmetic-precise-order-0                       509.0692+-3.8984          507.4544+-6.7713        
   arithmetic-precise-order-1                       439.0490+-2.1414          436.5153+-1.9443        
   arithmetic-precise-order-2                       499.4317+-6.5183          498.0814+-3.1901        
   arithmetic-simple-order-1                        564.2897+-2.3613     ?    565.0197+-1.5785        ?
   arithmetic-simple-order-2                        629.2296+-1.5402     ?    630.1444+-2.5457        ?
   lz-string                                        410.4956+-4.0380          408.2559+-1.7101        

   &lt;geometric&gt;                                      477.8970+-1.2422          476.6577+-0.3988          might be 1.0026x faster

                                                         r184563                   LazyNode                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   79.5143+-0.1350     ?     79.6821+-0.1878        ? might be 1.0021x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096723</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 17:47:38 -0700</bug_when>
    <thetext>Attachment 253562 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 14 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>1096781</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 21:35:35 -0700</bug_when>
    <thetext>Looks like EWS is super unhappy:

/Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17: error: conversion from &apos;JSC::DFG::LazyNode&apos; to &apos;bool&apos; is ambiguous
            if (location.index() &amp;&amp; !location.index().isNode())
                ^~~~~~~~~~~~~~~~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096855</commentid>
    <comment_count>9</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 07:29:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Looks like EWS is super unhappy:
&gt; 
&gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17:
&gt; error: conversion from &apos;JSC::DFG::LazyNode&apos; to &apos;bool&apos; is ambiguous
&gt;             if (location.index() &amp;&amp; !location.index().isNode())
&gt;                 ^~~~~~~~~~~~~~~~

Hmm, this is weird. There are two conversion-to-pointer operators in LazyNode:

  explicit operator Node*() const

and

  operator UnspecifiedBoolType*() const

and EWS complains that it doesn&apos;t know which one to use:

/Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14: note: candidate function
    explicit operator Node*() const { return asNode(); }
             ^
/Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5: note: candidate function
    operator UnspecifiedBoolType*() const
    ^

The conversion-to-Node* operator is explicit, and thus should be an error in C++03, and not a candidate for the implicit cast in C++11. Weird that it works on my machine, and that some builders didn&apos;t complain.
I will remove the operator Node* in favor of the asNode() method, but I still find this strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096856</commentid>
    <comment_count>10</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 07:34:04 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Looks like EWS is super unhappy:
&gt; &gt; 
&gt; &gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17:
&gt; &gt; error: conversion from &apos;JSC::DFG::LazyNode&apos; to &apos;bool&apos; is ambiguous
&gt; &gt;             if (location.index() &amp;&amp; !location.index().isNode())
&gt; &gt;                 ^~~~~~~~~~~~~~~~
&gt; 
&gt; Hmm, this is weird. There are two conversion-to-pointer operators in
&gt; LazyNode:
&gt; 
&gt;   explicit operator Node*() const
&gt; 
&gt; and
&gt; 
&gt;   operator UnspecifiedBoolType*() const
&gt; 
&gt; and EWS complains that it doesn&apos;t know which one to use:
&gt; 
&gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14:
&gt; note: candidate function
&gt;     explicit operator Node*() const { return asNode(); }
&gt;              ^
&gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5:
&gt; note: candidate function
&gt;     operator UnspecifiedBoolType*() const
&gt;     ^
&gt; 
&gt; The conversion-to-Node* operator is explicit, and thus should be an error in
&gt; C++03, and not a candidate for the implicit cast in C++11. Weird that it
&gt; works on my machine, and that some builders didn&apos;t complain.
&gt; I will remove the operator Node* in favor of the asNode() method, but I
&gt; still find this strange.

Actually, I can just make the operator Node* implicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096858</commentid>
    <comment_count>11</comment_count>
      <attachid>253589</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 08:14:27 -0700</bug_when>
    <thetext>Created attachment 253589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096859</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-22 08:17:03 -0700</bug_when>
    <thetext>Attachment 253589 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 14 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>1096860</commentid>
    <comment_count>13</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 08:28:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Looks like EWS is super unhappy:
&gt; &gt; &gt; 
&gt; &gt; &gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17:
&gt; &gt; &gt; error: conversion from &apos;JSC::DFG::LazyNode&apos; to &apos;bool&apos; is ambiguous
&gt; &gt; &gt;             if (location.index() &amp;&amp; !location.index().isNode())
&gt; &gt; &gt;                 ^~~~~~~~~~~~~~~~
&gt; &gt; 
&gt; &gt; Hmm, this is weird. There are two conversion-to-pointer operators in
&gt; &gt; LazyNode:
&gt; &gt; 
&gt; &gt;   explicit operator Node*() const
&gt; &gt; 
&gt; &gt; and
&gt; &gt; 
&gt; &gt;   operator UnspecifiedBoolType*() const
&gt; &gt; 
&gt; &gt; and EWS complains that it doesn&apos;t know which one to use:
&gt; &gt; 
&gt; &gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14:
&gt; &gt; note: candidate function
&gt; &gt;     explicit operator Node*() const { return asNode(); }
&gt; &gt;              ^
&gt; &gt; /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5:
&gt; &gt; note: candidate function
&gt; &gt;     operator UnspecifiedBoolType*() const
&gt; &gt;     ^
&gt; &gt; 
&gt; &gt; The conversion-to-Node* operator is explicit, and thus should be an error in
&gt; &gt; C++03, and not a candidate for the implicit cast in C++11. Weird that it
&gt; &gt; works on my machine, and that some builders didn&apos;t complain.
&gt; &gt; I will remove the operator Node* in favor of the asNode() method, but I
&gt; &gt; still find this strange.
&gt; 
&gt; Actually, I can just make the operator Node* implicit.

After thinking about it more, I didn&apos;t like the idea of an ASSERT()&apos;ing implicit conversion operator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096867</commentid>
    <comment_count>14</comment_count>
      <attachid>253589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 09:18:01 -0700</bug_when>
    <thetext>Comment on attachment 253589
Patch

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

Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that demonstrate when this is profitable?  You could also make these tests exercise both forms of def() in NewArrayBuffer.  For tests like these we like to make them exhibit absurdly good performance with the optimization enabled and absurdly bad with it disabled.  For example you might be able to do something like:

function foo() {
    var array = [1.5];
    return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5; // super expensive expression that folds away if we know that array[0] is a constant.
}

noInline(foo);

all foo a lot of times;

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1214
&gt; +    if (UNLIKELY(value.isUInt32()))

I wouldn&apos;t use UNLIKELY here.  I think that constants are often non-negative integers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096871</commentid>
    <comment_count>15</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 09:30:22 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 253589 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253589&amp;action=review
&gt; 
&gt; Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that
&gt; demonstrate when this is profitable?  You could also make these tests
&gt; exercise both forms of def() in NewArrayBuffer.  For tests like these we
&gt; like to make them exhibit absurdly good performance with the optimization
&gt; enabled and absurdly bad with it disabled.  For example you might be able to
&gt; do something like:
&gt; 
&gt; function foo() {
&gt;     var array = [1.5];
&gt;     return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5;
&gt; // super expensive expression that folds away if we know that array[0] is a
&gt; constant.
&gt; }
&gt; 
&gt; noInline(foo);
&gt; 
&gt; all foo a lot of times;


I have added the following two benchmarks in js-regress:

&lt;&lt;&lt;&lt;&lt; cse-new-array-buffer.js
function foo() {
    var array = [1.5];
    return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5;
}

for (var i = 0; i &lt; 100000; ++i)
    foo();
&gt;&gt;&gt;&gt;&gt;

&lt;&lt;&lt;&lt;&lt; cse-new-array.js
function foo(p) {
    var array = [1.5, p];
    return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5;
}

for (var i = 0; i &lt; 100000; ++i)
    foo(0);
&gt;&gt;&gt;&gt;&gt;

                               r184563                   LazyNode                                     

cse-new-array-buffer       12.0633+-0.5264     ^      2.8377+-0.0725        ^ definitely 4.2511x faster
cse-new-array              12.0446+-0.1058     ^      2.9589+-0.1008        ^ definitely 4.0706x faster

&lt;geometric&gt;                12.0514+-0.2410     ^      2.8972+-0.0602        ^ definitely 4.1597x faster

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1214
&gt; &gt; +    if (UNLIKELY(value.isUInt32()))
&gt; 
&gt; I wouldn&apos;t use UNLIKELY here.  I think that constants are often non-negative
&gt; integers.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096873</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 09:31:50 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Comment on attachment 253589 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=253589&amp;action=review
&gt; &gt; 
&gt; &gt; Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that
&gt; &gt; demonstrate when this is profitable?  You could also make these tests
&gt; &gt; exercise both forms of def() in NewArrayBuffer.  For tests like these we
&gt; &gt; like to make them exhibit absurdly good performance with the optimization
&gt; &gt; enabled and absurdly bad with it disabled.  For example you might be able to
&gt; &gt; do something like:
&gt; &gt; 
&gt; &gt; function foo() {
&gt; &gt;     var array = [1.5];
&gt; &gt;     return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5;
&gt; &gt; // super expensive expression that folds away if we know that array[0] is a
&gt; &gt; constant.
&gt; &gt; }
&gt; &gt; 
&gt; &gt; noInline(foo);
&gt; &gt; 
&gt; &gt; all foo a lot of times;
&gt; 
&gt; 
&gt; I have added the following two benchmarks in js-regress:
&gt; 
&gt; &lt;&lt;&lt;&lt;&lt; cse-new-array-buffer.js
&gt; function foo() {
&gt;     var array = [1.5];
&gt;     return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5;
&gt; }
&gt; 
&gt; for (var i = 0; i &lt; 100000; ++i)
&gt;     foo();
&gt; &gt;&gt;&gt;&gt;&gt;
&gt; 
&gt; &lt;&lt;&lt;&lt;&lt; cse-new-array.js
&gt; function foo(p) {
&gt;     var array = [1.5, p];
&gt;     return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5;
&gt; }
&gt; 
&gt; for (var i = 0; i &lt; 100000; ++i)
&gt;     foo(0);
&gt; &gt;&gt;&gt;&gt;&gt;
&gt; 
&gt;                                r184563                   LazyNode           
&gt; 
&gt; 
&gt; cse-new-array-buffer       12.0633+-0.5264     ^      2.8377+-0.0725       
&gt; ^ definitely 4.2511x faster
&gt; cse-new-array              12.0446+-0.1058     ^      2.9589+-0.1008       
&gt; ^ definitely 4.0706x faster
&gt; 
&gt; &lt;geometric&gt;                12.0514+-0.2410     ^      2.8972+-0.0602       
&gt; ^ definitely 4.1597x faster

Nice!

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1214
&gt; &gt; &gt; +    if (UNLIKELY(value.isUInt32()))
&gt; &gt; 
&gt; &gt; I wouldn&apos;t use UNLIKELY here.  I think that constants are often non-negative
&gt; &gt; integers.
&gt; 
&gt; Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096875</commentid>
    <comment_count>17</comment_count>
      <attachid>253593</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-22 09:35:04 -0700</bug_when>
    <thetext>Created attachment 253593
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096876</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-22 09:38:22 -0700</bug_when>
    <thetext>Attachment 253593 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 17 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>1096884</commentid>
    <comment_count>19</comment_count>
      <attachid>253593</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-22 10:24:30 -0700</bug_when>
    <thetext>Comment on attachment 253593
Patch for landing

Clearing flags on attachment: 253593

Committed r184776: &lt;http://trac.webkit.org/changeset/184776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096886</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-22 10:24:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253531</attachid>
            <date>2015-05-21 10:41:18 -0700</date>
            <delta_ts>2015-05-21 10:47:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>20150521104113.patch</filename>
            <type>text/plain</type>
            <size>9039</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggM2U2MjJhMDc4MjBmYzhlNWZmMGFkYzA3YzA1NmFmZjZjNzVkZjI4Mi4uMjAzZjU0
MGU4NGY1ODNlN2JmOWNlYTAyMTk1ODIzNjRmOWQ1Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTg3LDYgKzE4Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5jcHAKICAgICBkZmcvREZHTElDTVBoYXNl
LmNwcAogICAgIGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKKyAgICBkZmcvREZHTGF6eU5vZGUuY3Bw
CiAgICAgZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xp
dmVkU3RhdGUuY3BwCiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggY2ZhOGQzODY4OTU3OGNj
MzE1ODhhZGE5NjI5N2IxNjhmNWIyYjc5MC4uMzZjYzczNzA0YTU4Mjc5ZmZjYjcxOGNiOTQ5OGIz
NzljZDJiOWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC00
MjMsNiArNDIzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5h
bGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBs
YWNlbWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpT
VmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2Rl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVk
U3RhdGUuY3BwIiAvPgpAQCAtMTExNSw2ICsxMTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdKSVRGaW5hbGl6ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdKdW1wUmVwbGFjZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdMYXp5SlNWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0xhenlOb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TElDTVBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9uZ0xpdmVkU3RhdGUuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwppbmRleCA4ODU5NTEyNDk0MTU1NjJhOWI0MWZkZDlkMDRmOGEyMzA1
OTI2NTIzLi45M2ZlNWUyNjkwMzc1NmI5NWE3OThmYTE3NTViM2QyMzRjMjNjMDU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xMTkx
LDYgKzExOTEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1Zh
bHVlLmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCI+CisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0xJQ01QaGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTM1NjIsNiArMzU2NSw5IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0xhenlOb2RlLmgiPgorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAzNTBkOWM3ODM5OWU1NTMwYWNiNDAy
ODQ1NjFlZWVjMzg3M2UxZjQyLi5jYWY4YjZmNGNjNjk0OGE1NGQ0NjljYjMyZTYzNTIzZTMxNjJl
NTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAtMTU5
LDYgKzE1OSwxMCBAQCBwcml2YXRlOgogICAgIAogICAgICAgICBMYXp5Tm9kZSBhZGRJbXB1cmUo
SGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQogICAgICAgICB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogSWYgd2UgYXJlIHVzaW5nIHNtYWxsIG1hcHMsIHdlIG11c3Qgbm90IGRl
ZigpIGRlcml2ZWQgdmFsdWVzLgorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGUgb25seSBkZXJp
dmVkIHZhbHVlcyB3ZSBkZWYoKSBhcmUgY29uc3RhbnQtYmFzZWQuCisgICAgICAgICAgICBpZiAo
IWxvY2F0aW9uLmluZGV4KCkuaXNOb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgICAgICBpZiAoTGF6eU5vZGUgcmVzdWx0ID0gZmluZFJlcGxhY2VtZW50KGxv
Y2F0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgQVNT
RVJUKG1faW1wdXJlTGVuZ3RoIDwgY2FwYWNpdHkpOwpAQCAtNjUwLDE5ICs2NTQsMjQgQEAgcHVi
bGljOgogCiAgICAgICAgIGlmICh2YWx1ZS5pc05vZGUoKSAmJiBzdGF0aWNfY2FzdDxOb2RlKj4o
dmFsdWUpID09IG1fbm9kZSkgewogICAgICAgICAgICAgaWYgKCFtYXRjaC5pc05vZGUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcHJvcGVybHkgcmVjb3JkIHRoZSBjb25zdGFu
dCBpbiBvcmRlciB0byB1c2UgYW4gZXhpc3Rpbmcgb25lIGlmIGFwcGxpY2FibGUuCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgcmUtcnVubmluZyBHQ1NFIHdpbGwgbm90IGZp
bmQgbmV3IG9wdGltaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgbWF0Y2guZW5zdXJlSXNOb2Rl
KG1faW5zZXJ0aW9uU2V0LCBtX2Jsb2NrLCBtX25vZGVJbmRleCktPm93bmVyID0gbV9ibG9jazsK
ICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQoUHVyZVZhbHVl
KHN0YXRpY19jYXN0PE5vZGUqPihtYXRjaCksIG1hdGNoLT5jb25zdGFudCgpKSwgVmVjdG9yPE5v
ZGUqPigpKTsKKyAgICAgICAgICAgICAgICBib29sIHJlcGxhY2VkID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZVtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5h
dG9ycy5kb21pbmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaC0+cmVwbGFjZVdpdGgoY2FuZGlkYXRlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaC5zZXROb2RlKGNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+
YXZhaWxhYmxlQXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOworICAgICAgICAgICAgICAgIGlm
ICghcmVwbGFjZWQpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKHN0YXRpY19jYXN0PE5vZGUqPihtYXRjaCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChzdGF0aWNfY2FzdDxOb2RlKj4obWF0Y2gpKTsKICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCmluZGV4IGNmYzAyNWViYTViZTI3YTM4NjZkMjQ4ZDkxNzkzZWQ2MWM0YmU2
MmEuLmU0MzcxMDdhNWZmOTk3YzBlNDJlNDQ5NjNkMzZiODFmNjlkMTU1NmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC04NDMsMTAgKzg0Myw2IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAg
Y2FzZSBOZXdUeXBlZEFycmF5OgotICAgICAgICAvLyBGSVhNRTogRW5hYmxlIENTRSBmb3IgdGhl
c2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1c2UgdGhlcmUgaXMgbm8g
d2F5Ci0gICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBub2RlIGFuZCBhIHZhbHVl
IG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2VyZWQKLSAgICAgICAgLy8g
dGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3YXkgb2YgZGVmKCknaW5n
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
NzM3CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9i
amVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtODU0LDYgKzg1MCwzNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgTmV3QXJyYXk6IHsKICAgICAgICAgcmVhZChIZWFw
T2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworCisgICAgICAg
IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBu
b2RlKSwKKyAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihudW1FbGVt
ZW50cykpKSk7CisKKyAgICAgICAgaWYgKCFudW1FbGVtZW50cykgcmV0dXJuOworCisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgaGVhcCA9IEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgICAgICBoZWFwID0gSW5kZXhlZEludDMyUHJvcGVydGllczsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgICAgICAgICBoZWFwID0gSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVz
OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgb3Bl
cmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBudW1FbGVtZW50czsgKytvcGVyYW5kSWR4KSB7Cisg
ICAgICAgICAgICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RD
aGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4
ZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZSwgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVy
KG9wZXJhbmRJZHgpKSkpLAorICAgICAgICAgICAgICAgIExhenlOb2RlKHVzZS5ub2RlKCkpKTsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODY2LDkgKzg5Mywx
MSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFk
RnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGgu
ZnJlZXplKGpzTnVtYmVyKG51bUVsZW1lbnRzKSkpKTsKIAogICAgICAgICBBYnN0cmFjdEhlYXAg
aGVhcDsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBzd2l0Y2gg
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzOworICAgICAgICAgICAgICAgIG9wID0gRG91YmxlQ29uc3RhbnQ7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgpA
QCAtODgwLDE0ICs5MDksMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGRhdGEgPSBn
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5jb25zdGFu
dEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpOworICAgICAgICBKU1ZhbHVlKiBkYXRhID0g
Z3JhcGgubV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUVsZW1lbnRzOyAr
K2luZGV4KSB7CiAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgaGVhcCwgbm9kZSwgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKGluZGV4KSkpKSwK
LSAgICAgICAgICAgICAgICBMYXp5Tm9kZShncmFwaC5mcmVlemUoZGF0YVtpbmRleF0pKSk7Cisg
ICAgICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGRhdGFbaW5kZXhdKSwgb3ApKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMYXp5Tm9kZS5oCmluZGV4IGU3OWUwOWJjNWZiYmU0Mzk5OGYxNTg3YzA1ODdiM2Q2YmQ2
ZmRhOTcuLjNkYWYxZGJkZmNmNTUyOTY1MGQ3MTRkNmZjM2RkY2Y1NzU2MGMzYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6TGF6eU5vZGU6OktpbmQpOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIHRlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkxhenlOb2RlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6TGF6eU5vZGU+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IHRydWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253532</attachid>
            <date>2015-05-21 10:47:11 -0700</date>
            <delta_ts>2015-05-21 17:45:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145272-20150521104707.patch</filename>
            <type>text/plain</type>
            <size>51225</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggM2U2MjJhMDc4MjBmYzhlNWZmMGFkYzA3YzA1NmFmZjZjNzVkZjI4Mi4uMjAzZjU0
MGU4NGY1ODNlN2JmOWNlYTAyMTk1ODIzNjRmOWQ1Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTg3LDYgKzE4Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgZGZnL0RGR0p1bXBSZXBsYWNlbWVudC5jcHAKICAgICBkZmcvREZHTElDTVBoYXNl
LmNwcAogICAgIGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKKyAgICBkZmcvREZHTGF6eU5vZGUuY3Bw
CiAgICAgZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xp
dmVkU3RhdGUuY3BwCiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggY2ZhOGQzODY4OTU3OGNj
MzE1ODhhZGE5NjI5N2IxNjhmNWIyYjc5MC4uMzZjYzczNzA0YTU4Mjc5ZmZjYjcxOGNiOTQ5OGIz
NzljZDJiOWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC00
MjMsNiArNDIzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5h
bGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBs
YWNlbWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpT
VmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2Rl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVk
U3RhdGUuY3BwIiAvPgpAQCAtMTExNSw2ICsxMTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdKSVRGaW5hbGl6ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdKdW1wUmVwbGFjZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdMYXp5SlNWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0xhenlOb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TElDTVBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9uZ0xpdmVkU3RhdGUuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwppbmRleCA4ODU5NTEyNDk0MTU1NjJhOWI0MWZkZDlkMDRmOGEyMzA1
OTI2NTIzLi45M2ZlNWUyNjkwMzc1NmI5NWE3OThmYTE3NTViM2QyMzRjMjNjMDU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xMTkx
LDYgKzExOTEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1Zh
bHVlLmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCI+CisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0xJQ01QaGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTM1NjIsNiArMzU2NSw5IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0xhenlOb2RlLmgiPgorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBhYzlkMjU4MmRmNjBlNTdjNTZmMDAwYmUwODFiYzdhYmQ3MWI0
MGE1Li5lNDg4MzNjNWM5ODFmMTA0N2ZmMDdkZTY2NTI4NDk2MmNhMTU5MDkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTYwLDYgKzk2MCw4IEBACiAJCTVERTZFNUIzMEUxNzI4
RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk2MkQy
RDM4RjFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFBREYxMDNGMDAwMjA2
QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi87IH07CiAJCTYyRDJEMzkwMUFERjEwM0YwMDAy
MDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJl
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTYyRjJBQTM3MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0
Q0EgLyogREZHTGF6eU5vZGUuY3BwICovOyB9OworCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0Eg
LyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFF
NUUwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MTEy
MkZEMTQwNDZBNEMwMDJCMTAxRCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3
MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk2NTExMjJGRTE0
MDQ2QTRDMDAyQjEwMUQgLyogbGliZWRpdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJl
ZGl0LmR5bGliICovOyB9OwpAQCAtMjY3Myw2ICsyNjc1LDggQEAKIAkJNURBRkQ2Q0IxNDZCNjg2
MzAwRkJFRkI0IC8qIEpTQy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBKU0MueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVERERGNDQ2MTRGRUU3MjIwMEI0RkI0RCAvKiBM
TEludERlc2lyZWRPZmZzZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExM
SW50RGVzaXJlZE9mZnNldHMuaDsgcGF0aCA9IExMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZz
ZXRzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVERTNEMEY0MERE
OERERkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViS2l0QXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5Tm9kZS5jcHA7IHBhdGgg
PSBkZmcvREZHTGF6eU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkE5
QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHTGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyog
RnVuY3Rpb25SYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGdW5jdGlvblJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJE
MkQzOEUxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00OTg5LDYgKzQ5OTMsOCBAQAogCQkJCTBGQzk3RjNBMTgyMDIx
MTkwMDJDOUIyNiAvKiBERkdKdW1wUmVwbGFjZW1lbnQuaCAqLywKIAkJCQlBNzNBNTM1ODE3OTlD
RDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCUE3M0E1MzU5MTc5OUNE
NUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTYyQTlBMjlFMUIwQkVENDgw
MEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi8sCisJCQkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1
NENBIC8qIERGR0xhenlOb2RlLmggKi8sCiAJCQkJQTdEOUEyOTIxN0EwQkM3NDAwRUUyNjE4IC8q
IERGR0xJQ01QaGFzZS5jcHAgKi8sCiAJCQkJQTdEOUEyOTMxN0EwQkM3NDAwRUUyNjE4IC8qIERG
R0xJQ01QaGFzZS5oICovLAogCQkJCUE3RDg5Q0VDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLApAQCAtNTg2Nyw2ICs1ODczLDcgQEAKIAkJCQlBN0Q4
OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyRjJBQTM4
MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
MDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlv
bkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzI0Nyw2ICs3MjU0LDcgQEAKIAkJCQkwRkVBMEEw
RDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzhBOTc4MDE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkI5Q0Y0MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZH
TGF6eU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3
REJEQTUgLyogRlRMTGluay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMw
MDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmluZGV4IDE0MTM4NDMyMjIyMjc5Y2E4N2M0ZmVi
Y2JjNmZhNWNhYzA1YjE4ODQuLmNhZjhiNmY0Y2M2OTQ4YTU0ZDQ2OWNiMzJlNjM1MjNlMzE2MmU1
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDgs
NyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9u
IGxvY2F0aW9uKQorICAgICAgICBMYXp5Tm9kZSBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9u
IGxvY2F0aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lt
cHVyZUxlbmd0aDsgaS0tOykgewogICAgICAgICAgICAgICAgIGlmIChtX2ltcHVyZU1hcFtpXS5r
ZXkgPT0gbG9jYXRpb24pCkBAIC0xNTcsMTggKzE1NywyMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgTm9kZSogYWRkSW1w
dXJlKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICAgICAgTGF6eU5vZGUg
YWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKE5vZGUqIHJlc3VsdCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlv
bikpCisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgYXJlIHVzaW5nIHNtYWxsIG1hcHMsIHdl
IG11c3Qgbm90IGRlZigpIGRlcml2ZWQgdmFsdWVzLgorICAgICAgICAgICAgLy8gRm9yIG5vdyB0
aGUgb25seSBkZXJpdmVkIHZhbHVlcyB3ZSBkZWYoKSBhcmUgY29uc3RhbnQtYmFzZWQuCisgICAg
ICAgICAgICBpZiAoIWxvY2F0aW9uLmluZGV4KCkuaXNOb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBpZiAoTGF6eU5vZGUgcmVzdWx0ID0gZmluZFJl
cGxhY2VtZW50KGxvY2F0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICAgICAgQVNTRVJUKG1faW1wdXJlTGVuZ3RoIDwgY2FwYWNpdHkpOwotICAgICAgICAgICAg
bV9pbXB1cmVNYXBbbV9pbXB1cmVMZW5ndGgrK10gPSBXVEY6OktleVZhbHVlUGFpcjxIZWFwTG9j
YXRpb24sIE5vZGUqPihsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgICAgICBtX2ltcHVyZU1hcFtt
X2ltcHVyZUxlbmd0aCsrXSA9IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBMb2NhdGlvbiwgTGF6eU5v
ZGU+KGxvY2F0aW9uLCBub2RlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8UHVyZVZh
bHVlLCBOb2RlKj4gbV9wdXJlTWFwW2NhcGFjaXR5XTsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBh
aXI8SGVhcExvY2F0aW9uLCBOb2RlKj4gbV9pbXB1cmVNYXBbY2FwYWNpdHldOworICAgICAgICBX
VEY6OktleVZhbHVlUGFpcjxIZWFwTG9jYXRpb24sIExhenlOb2RlPiBtX2ltcHVyZU1hcFtjYXBh
Y2l0eV07CiAgICAgICAgIHVuc2lnbmVkIG1fcHVyZUxlbmd0aDsKICAgICAgICAgdW5zaWduZWQg
bV9pbXB1cmVMZW5ndGg7CiAgICAgfTsKQEAgLTE5OCwxMiArMjAyLDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgTm9kZSogZmluZFJlcGxhY2VtZW50KEhlYXBMb2NhdGlvbiBsb2NhdGlv
bikKKyAgICAgICAgTGF6eU5vZGUgZmluZFJlcGxhY2VtZW50KEhlYXBMb2NhdGlvbiBsb2NhdGlv
bikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW1wdXJlTWFwLmdldChsb2NhdGlv
bik7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgTm9kZSogYWRkSW1wdXJlKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICAgICAgTGF6eU5vZGUgYWRkSW1wdXJlKEhlYXBM
b2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKICAgICAgICAgewogICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBtX2ltcHVyZU1hcC5hZGQobG9jYXRpb24sIG5vZGUpOwogICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQpAQCAtMjEzLDcgKzIxNyw3IEBAIHByaXZhdGU6CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPFB1cmVWYWx1ZSwgTm9kZSo+IG1fcHVyZU1h
cDsKLSAgICAgICAgSGFzaE1hcDxIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2ltcHVyZU1hcDsKKyAg
ICAgICAgSGFzaE1hcDxIZWFwTG9jYXRpb24sIExhenlOb2RlPiBtX2ltcHVyZU1hcDsKICAgICB9
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwcz4KQEAgLTIyMSw2ICsyMjUsNyBAQCBwcml2
YXRlOgogICAgIHB1YmxpYzoKICAgICAgICAgQmxvY2tDU0UoR3JhcGgmIGdyYXBoKQogICAgICAg
ICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAgICAgLCBtX2luc2VydGlvblNldChncmFw
aCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgCkBAIC0yMjgsNiArMjMzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgewogICAgICAgICAgICAgbV9tYXBzLmNsZWFyKCk7CiAgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAg
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgbV9ub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CkBAIC0yOTcsNiArMzAzLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgY2xvYmJlcml6ZShtX2dyYXBoLCBtX25vZGUsICp0aGlzKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOwogICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAg
ICAgICAgIH0KQEAgLTMxOCw5ICszMjYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIAotICAgICAgICB2b2lkIGRlZihIZWFwTG9jYXRp
b24gbG9jYXRpb24sIE5vZGUqIHZhbHVlKQorICAgICAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24g
bG9jYXRpb24sIExhenlOb2RlIHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBt
YXRjaCA9IG1fbWFwcy5hZGRJbXB1cmUobG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgICAgIExh
enlOb2RlIG1hdGNoID0gbV9tYXBzLmFkZEltcHVyZShsb2NhdGlvbiwgdmFsdWUpOwogICAgICAg
ICAgICAgaWYgKCFtYXRjaCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAt
MzQzLDggKzM1MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJl
YWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgICAgICBtX25vZGUtPnJlcGxh
Y2VXaXRoKG1hdGNoKTsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNOb2RlKCkgJiYgc3RhdGljX2Nhc3Q8Tm9kZSo+KHZhbHVlKSA9PSBtX25v
ZGUpIHsKKyAgICAgICAgICAgICAgICBtYXRjaC5lbnN1cmVJc05vZGUobV9pbnNlcnRpb25TZXQs
IG1fYmxvY2ssIDApLT5vd25lciA9IG1fYmxvY2s7CisgICAgICAgICAgICAgICAgbV9ub2RlLT5y
ZXBsYWNlV2l0aChzdGF0aWNfY2FzdDxOb2RlKj4obWF0Y2gpKTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgCiAgICAgcHJp
dmF0ZToKQEAgLTM1Miw4ICszNjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGJv
b2wgbV9jaGFuZ2VkOwogICAgICAgICBOb2RlKiBtX25vZGU7CisgICAgICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7CiAgICAgCiAgICAgICAgIE1hcHMgbV9tYXBzOworCisgICAgICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKICAgICB9OwogCiAgICAgQmxvY2tDU0U8U21hbGxNYXBzPiBt
X3NtYWxsQmxvY2s7CkBAIC0zNjUsNiArMzc5LDcgQEAgcHVibGljOgogICAgIEdsb2JhbENTRVBo
YXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImdsb2JhbCBjb21tb24g
c3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgICAgICwgbV9pbXB1cmVEYXRhTWFwKGdy
YXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC00MjksNiArNDQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRhdGFMb2coIlBy
b2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4iKTsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CiAgICAg
ICAgICAgICAgICAgbV9ub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICBMb29raW5n
IGF0IG5vZGUgIiwgbV9ub2RlLCAiOlxuIik7CkBAIC00NDEsNiArNDU3LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1f
Z3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDg2LDEzICs1MDQs
MTMgQEAgcHVibGljOgogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChtX25v
ZGUpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9u
IGxvY2F0aW9uKQorICAgIExhenlOb2RlIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9j
YXRpb24pCiAgICAgewogICAgICAgICAvLyBBdCB0aGlzIGluc3RhbnQsIG91ciAiYXZhaWxhYmxl
QXRUYWlsIiByZWZsZWN0cyB0aGUgc2V0IG9mIHRoaW5ncyB0aGF0IGFyZSBhdmFpbGFibGUgaW4K
ICAgICAgICAgLy8gdGhpcyBibG9jayBzbyBmYXIuIFdlIGNoZWNrIHRoaXMgbWFwIHRvIGZpbmQg
YmxvY2stbG9jYWwgQ1NFIG9wcG9ydHVuaXRpZXMgYmVmb3JlIGRvaW5nCiAgICAgICAgIC8vIGEg
Z2xvYmFsIHNlYXJjaC4KLSAgICAgICAgTm9kZSogbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWls
YWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwotICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
TGF6eU5vZGUgbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRp
b24pOworICAgICAgICBpZiAoISFtYXRjaCkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgRm91bmQgbG9jYWwgbWF0Y2g6ICIsIG1hdGNo
LCAiXG4iKTsKICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKQEAgLTU3NSw3ICs1OTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5nZXQo
bG9jYXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eTogIiwgbWF0Y2gsICJcbiIpOwotICAg
ICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIGlmICghIW1hdGNoKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGV4YW1pbmUgdGhlIHByZWRlY2Vzc29ycyBv
ZiBhIG1hdGNoLiBBdCB0aGlzIHBvaW50IHdlIGp1c3Qgd2FudCB0bwogICAgICAgICAgICAgICAg
ICAgICAvLyBlc3RhYmxpc2ggdGhhdCBvdGhlciBibG9ja3Mgb24gdGhlIHBhdGggZnJvbSBoZXJl
IHRvIHRoZXJlIGRvbid0IGNsb2JiZXIKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxvY2F0
aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uCkBAIC02MTYsMTIgKzYzNCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZWYoSGVhcExvY2F0
aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9j
YXRpb24sIExhenlOb2RlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24gZGVmOiAiLCBsb2NhdGlvbiwg
IiAtPiAiLCB2YWx1ZSwgIlxuIik7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBtYXRjaCA9IGZp
bmRSZXBsYWNlbWVudChsb2NhdGlvbik7CisgICAgICAgIExhenlOb2RlIG1hdGNoID0gZmluZFJl
cGxhY2VtZW50KGxvY2F0aW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBtYXRjaCwgIlxuIik7CkBAIC02
MzMsOSArNjUxLDMxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2gpOwotICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh2YWx1ZS5pc05vZGUoKSAmJiBzdGF0aWNfY2Fz
dDxOb2RlKj4odmFsdWUpID09IG1fbm9kZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaC5pc05v
ZGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcHJvcGVybHkgcmVjb3JkIHRo
ZSBjb25zdGFudCBpbiBvcmRlciB0byB1c2UgYW4gZXhpc3Rpbmcgb25lIGlmIGFwcGxpY2FibGUu
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgcmUtcnVubmluZyBHQ1NFIHdp
bGwgbm90IGZpbmQgbmV3IG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgbWF0Y2guZW5z
dXJlSXNOb2RlKG1faW5zZXJ0aW9uU2V0LCBtX2Jsb2NrLCBtX25vZGVJbmRleCktPm93bmVyID0g
bV9ibG9jazsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcHVyZVZhbHVlcy5hZGQo
UHVyZVZhbHVlKHN0YXRpY19jYXN0PE5vZGUqPihtYXRjaCksIG1hdGNoLT5jb25zdGFudCgpKSwg
VmVjdG9yPE5vZGUqPigpKTsKKyAgICAgICAgICAgICAgICBib29sIHJlcGxhY2VkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC0+cmVwbGFjZVdpdGgoY2FuZGlkYXRlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5zZXROb2RlKGNhbmRpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
cmVwbGFjZWQpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHN0YXRpY19jYXN0PE5vZGUqPihtYXRjaCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9ub2RlLT5yZXBsYWNlV2l0aChzdGF0aWNfY2FzdDxOb2RlKj4obWF0Y2gpKTsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgc3Ry
dWN0IEltcHVyZUJsb2NrRGF0YSB7CkBAIC02NTYsOCArNjk2LDEwIEBAIHB1YmxpYzoKICAgICAK
ICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fbm9kZTsKKyAgICB1bnNpZ25l
ZCBtX25vZGVJbmRleDsKICAgICBJbXB1cmVCbG9ja0RhdGEqIG1faW1wdXJlRGF0YTsKICAgICBD
bG9iYmVyU2V0IG1fd3JpdGVzU29GYXI7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OwogICAgIAogICAgIGJvb2wgbV9jaGFuZ2VkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKaW5kZXggNTIzZDcyM2I1NzBhYzUwMDZkZThjYTAxZGNhMWNhMGY0
ZDRlMzM4Ni4uNmY3OTY0YTEyMWRjODc3NGZiZGZkOTViYzRiYzZkN2RkZjM5ZmZlMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHSGVhcExvY2F0aW9uLmgiCisjaW5jbHVkZSAiREZHTGF6eU5vZGUuaCIK
ICNpbmNsdWRlICJERkdQdXJlVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewpAQCAtMTk1LDcgKzE5Niw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAg
ICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRl
cmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJv
cGVydGllcyk7Ci0gICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJv
cGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5k
ZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChIZWFwKTsKQEAgLTIwNiw3ICsyMDcs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFk
RnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJv
dW5kcygpKSB7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKLSAgICAgICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwor
ICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJ
bmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
TGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJlYWQoSGVhcCk7CkBAIC0yMTcsNyArMjE4LDcgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlO
b2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZWFkKEhlYXApOwpAQCAtMzAzLDcgKzMwNCw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgICAgIAogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9p
bnRMb2MsIFdhdGNocG9pbnRfZmlyZSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEludmFsaWRhdGlvblBvaW50TG9jLCBXYXRjaHBvaW50X2ZpcmUpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgRmx1c2g6CkBAIC0zNTQsMTcgKzM1NSwxNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBv
aW50OgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsIE1pc2NGaWVsZHMpLCBub2RlKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLCBNaXNjRmllbGRzKSwg
TGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIElzT2JqZWN0T3JO
dWxsOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KElzT2JqZWN0T3JOdWxsTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElzT2JqZWN0T3JOdWxsTG9jLCBNaXNjRmllbGRzLCBu
b2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5SWQ6CkBAIC0zOTEsNDUgKzM5Miw0NSBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlcjoKICAg
ICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfZ2V0dGVyKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihHZXR0ZXJMb2MsIEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2V0dGVyTG9jLCBHZXR0ZXJTZXR0ZXJfZ2V0dGVy
LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldFNldHRlcjoKICAgICAgICAgcmVhZChHZXR0ZXJTZXR0ZXJfc2V0
dGVyKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9z
ZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
U2V0dGVyTG9jLCBHZXR0ZXJTZXR0ZXJfc2V0dGVyLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2Rl
KG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToK
ICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpOwotICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3Rh
Y2s6OkNhbGxlZSkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywg
QWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpDYWxsZWUpKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoKICAg
ICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja1BheWxvYWRMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja1BheWxvYWRMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJh
Y3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9j
YWw6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSksIExh
enlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ss
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CiAgICAgICAgIHJlYWQoaGVhcCk7Ci0g
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBub2RlKTsKKyAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewogICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKICAgICAgICAgd3JpdGUoaGVhcCk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIGhlYXApLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
ICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwg
TGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
QnlWYWw6IHsKQEAgLTQ5MSwxOSArNDkyLDE5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAg
ICAgICAgcmVhZChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVz
LCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBEaXJlY3RBcmd1bWVudHNQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2Nv
cGVkQXJndW1lbnRzOgogICAgICAgICAgICAgcmVhZChTY29wZVByb3BlcnRpZXMpOwotICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFNjb3BlUHJvcGVydGll
cywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVQcm9wZXJ0aWVzLCBub2Rl
LT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAg
ICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMy
UHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhl
ZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9k
ZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC01MTQsNyArNTE1LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3Vu
ZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAg
ICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7Ci0gICAgICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2Rl
KG5vZGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKQEAgLTUyNSw3ICs1MjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKElu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQo
V29ybGQpOwpAQCAtNTU0LDcgKzU1NSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJh
eVByb3BlcnRpZXMpOwogICAgICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVydGll
cywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgVHlwZWRBcnJheVByb3BlcnRpZXMs
IG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtNjA1LDcgKzYwNiw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgICAgICB3cml0ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIHdyaXRl
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwg
dmFsdWUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgTGF6eU5vZGUodmFsdWUpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CkBAIC02MjAsNyArNjIxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgICAgIHdyaXRlKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIHdyaXRl
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCks
IHZhbHVlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9j
LCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCBMYXp5Tm9kZSh2YWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CkBAIC02MzUsNyArNjM2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAgICAg
ICAgICB3cml0ZShCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMs
IGJhc2UsIGluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgYmFzZSwgaW5kZXgp
LCBMYXp5Tm9kZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKQEAgLTY4MSwxMiArNjgyLDEyIEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAg
ICAgIHJlYWQoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KENoZWNrSGFzSW5zdGFuY2VMb2MsIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBub2RlLT5jaGlsZDEo
KSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENoZWNrSGFzSW5zdGFuY2VMb2Ms
IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5zdGFuY2VPZkxv
YywgSlNDZWxsX3N0cnVjdHVyZUlELCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBu
b2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0YW5jZU9mTG9jLCBKU0NlbGxfc3Ry
dWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUp
KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC02OTgsMTgg
KzY5OSwxOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVy
Zmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1
dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2Rl
KG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihC
dXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZs
eSwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0
dGVyZmx5KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0
X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eWlmeToKQEAgLTcyOSwxMiArNzMwLDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0VHlw
ZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVHlwZWRBcnJheUJ5
dGVPZmZzZXRMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkBAIC03
NDIsNyArNzQzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaWRlbnRpZmllck51
bWJlcjsKICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBpZGVudGlm
aWVyTnVtYmVyKTsKICAgICAgICAgcmVhZChoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigp
KSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTc1MSw3ICs3NTIsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKEpT
T2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVy
dGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKTsKICAg
ICAgICAgcmVhZChoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5
TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9k
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTc2NCw3ICs3NjUsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVj
dHVyZUlEKTsKICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxv
Y2F0ZXNTdG9yYWdlKCkpCiAgICAgICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTc3Miw3ICs3NzMsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVy
TnVtYmVyOwogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50
aWZpZXJOdW1iZXIpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIoKSksIG5vZGUtPmNoaWxk
MygpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywg
aGVhcCwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDMoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC03ODUsNyArNzg2LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgog
ICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgcmVh
ZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
QXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwg
bm9kZSk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6CkBAIC03OTUsNjIgKzc5NiwxMzAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2Ms
IE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBB
U1NFUlQobW9kZS50eXBlZEFycmF5VHlwZSgpICE9IE5vdFR5cGVkQXJyYXkpOwogICAgICAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlM
ZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGls
ZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkp
KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0
SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQo
KS5vZmZzZXQoKSksIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQo
KSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChTY29wZVByb3BlcnRpZXMs
IG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2Rl
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0RnJvbUFyZ3VtZW50czogewogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChEaXJl
Y3RBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9m
ZnNldCgpKTsKICAgICAgICAgcmVhZChoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihE
aXJlY3RBcmd1bWVudHNMb2MsIGhlYXApLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihEaXJlY3RBcmd1bWVudHNMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6IHsKICAgICAg
ICAgQWJzdHJhY3RIZWFwIGhlYXAoRGlyZWN0QXJndW1lbnRzUHJvcGVydGllcywgbm9kZS0+Y2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKSk7CiAgICAgICAgIHdyaXRlKGhlYXApOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oRGlyZWN0QXJndW1l
bnRzTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFw
KEFic29sdXRlLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpLCBub2RlKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBu
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKTsKLSAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihHbG9iYWxWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKEFic29sdXRlLCBu
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1
dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU2l6ZToKLSAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKLSAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBDU0UgZm9yIHRoZXNlIG5vZGVz
LiBXZSBjYW4ndCBkbyB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheQotICAg
ICAgICAvLyBmb3IgdXMgdG8gY2xhaW0gYW4gaW5kZXggbm9kZSBhbmQgYSB2YWx1ZSBub2RlLiBX
ZSBjb3VsZCBtYWtlIHRoaXMgd29yayBpZiB3ZSBsb3dlcmVkCi0gICAgICAgIC8vIHRoZXNlIG5v
ZGVzIG9yIGlmIHdlIGhhZCBhIG1vcmUgZmxleGlibGUgd2F5IG9mIGRlZigpJ2luZy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDczNwogICAg
ICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3Vu
dCk7CiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAg
IHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsK
KworICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxkcmVuKCk7CisK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCwgbm9kZSksCisgICAgICAgICAgICBMYXp5Tm9kZShncmFwaC5mcmVlemUoanNOdW1i
ZXIobnVtRWxlbWVudHMpKSkpOworCisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXA7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZEludDMyUHJvcGVydGllczsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJ
ZHggPCBudW1FbGVtZW50czsgKytvcGVyYW5kSWR4KSB7CisgICAgICAgICAgICBFZGdlIHVzZSA9
IGdyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07
CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgaGVhcCwg
bm9kZSwgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKG9wZXJhbmRJZHgpKSkpLAorICAg
ICAgICAgICAgICAgIExhenlOb2RlKHVzZS5ub2RlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKKyAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwor
CisgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ29uc3RhbnRzKCk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgsIG5vZGUpLAorICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVy
KG51bUVsZW1lbnRzKSkpKTsKKworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcDsKKyAgICAgICAg
Tm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50OworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgIGhlYXAgPSBJbmRleGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIG9wID0g
RG91YmxlQ29uc3RhbnQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGhlYXAgPSBJbmRleGVkSW50MzJQcm9w
ZXJ0aWVzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGhlYXAgPSBJbmRleGVkQ29udGlndW91c1By
b3BlcnRpZXM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSogZGF0YSA9IGdyYXBo
Lm1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1FbGVtZW50czsgKytpbmRl
eCkgeworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhl
YXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihpbmRleCkpKSksCisgICAg
ICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGRhdGFbaW5kZXhdKSwgb3ApKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgY2FzZSBOZXdPYmplY3Q6CiAg
ICAgY2FzZSBOZXdSZWdleHA6CkBAIC0xMDM5LDcgKzExMDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdmFsdWUuZGVmKHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkgY29uc3QKKyAgICB2b2lkIG9wZXJhdG9y
KCkoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKSBjb25zdAogICAgIHsKICAg
ICAgICAgbV92YWx1ZS5kZWYobG9jYXRpb24sIG5vZGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCmluZGV4IGNlMjdlZjRiZjcxOWI3Y2QwZDlh
MDRiNmVjYTE5ODU2MzZlYzEyMjMuLjNkM2E5NGNjZjEzODYxODI3ZWMyOGM5MTU3ZDU2YTIyMTRm
NmFhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaApA
QCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJz
dHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHTGF6eU5vZGUuaCIKICNpbmNsdWRlICJERkdOb2Rl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTY0LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIEhlYXBMb2NhdGlvbigKICAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJ
bnZhbGlkTG9jYXRpb25LaW5kLAogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0
SGVhcCgpLAotICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxs
cHRyKQorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTGF6eU5vZGUgaW5kZXggPSBMYXp5
Tm9kZSgpKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1faGVhcChoZWFwKQog
ICAgICAgICAsIG1fYmFzZShiYXNlKQpAQCAtNzQsNiArNzUsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CiAgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwg
IW1faW5kZXgpOwogICAgIH0KKworICAgIEhlYXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwg
QWJzdHJhY3RIZWFwIGhlYXAsIE5vZGUqIGJhc2UsIE5vZGUqIGluZGV4KQorICAgICAgICA6IEhl
YXBMb2NhdGlvbihraW5kLCBoZWFwLCBiYXNlLCBMYXp5Tm9kZShpbmRleCkpCisgICAgeworICAg
IH0KICAgICAKICAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQsIEFic3RyYWN0SGVh
cCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCiAgICAgICAgIDogSGVhcExv
Y2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpCkBAIC05MywxMSAr
OTksMTEgQEAgcHVibGljOgogICAgIExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CiAgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7
IH0KICAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgTm9kZSog
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTGF6eU5vZGUgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbV9raW5kICsgbV9oZWFwLmhhc2goKSArIFdURjo6UHRy
SGFzaDxOb2RlKj46Omhhc2gobV9pbmRleCkgKyBtX2tpbmQ7CisgICAgICAgIHJldHVybiBtX2tp
bmQgKyBtX2hlYXAuaGFzaCgpICsgbV9pbmRleC5oYXNoKCkgKyBtX2tpbmQ7CiAgICAgfQogICAg
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdApA
QCAtMTE5LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKICAg
ICBBYnN0cmFjdEhlYXAgbV9oZWFwOwogICAgIE5vZGUqIG1fYmFzZTsKLSAgICBOb2RlKiBtX2lu
ZGV4OworICAgIExhenlOb2RlIG1faW5kZXg7CiB9OwogCiBzdHJ1Y3QgSGVhcExvY2F0aW9uSGFz
aCB7CkBAIC0xNDgsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
OkRGRzo6SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0MKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9u
LCBOb2RlKj4gSW1wdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5v
ZGU+IEltcHVyZU1hcDsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNjhjZTkxNjcxN2Fh
NmVjM2RiNmE0YWJkOGMwMzY4ZDQyNTExMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0xhenlOb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIExhenlOb2RlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgb3V0LnByaW50
KCJMYXp5Tm9kZTowIik7CisgICAgZWxzZSB7CisgICAgICAgIG91dC5wcmludCgiTGF6eU5vZGU6
IiwgbV9raW5kLCAiKCIpOworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNl
IExhenlOb2RlOjpLaW5kOjpOb2RlOgorICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgdS5hc05v
ZGUtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMYXp5Tm9k
ZTo6S2luZDo6RnJvemVuVmFsdWU6CisgICAgICAgICAgICBvdXQucHJpbnQoR3JhcGg6Om9wTmFt
ZShtX29wKSwgIiwgIiwgcG9pbnRlckR1bXAodS5hc1ZhbHVlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICB9Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExhenlO
b2RlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBMYXp5Tm9k
ZTo6S2luZDo6Tm9kZToKKyAgICAgICAgb3V0LnByaW50KCJOb2RlIik7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgTGF6eU5vZGU6OktpbmQ6OkZyb3plblZhbHVlOgorICAgICAgICBvdXQu
cHJpbnQoIkZyb3plblZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMYXp5Tm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9k
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdjMWZkNTVjMjExYjI4MWU4ZjA5ODE1MzJkM2JiNzEyNWVkNWYxMmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2Rl
LmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERGR0xhenlOb2RlX2gKKyNkZWZpbmUgREZHTGF6eU5vZGVfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMYXp5Tm9kZSB7CitwdWJsaWM6
CisgICAgZW51bSBjbGFzcyBLaW5kIHsKKyAgICAgICAgTm9kZSA9IDAsIC8vIFRoaXMgbmVlZHMg
dG8gYmUgemVybyBzbyB0aGF0IGFuIGVtcHR5IExhenlOb2RlIGlzIHplcm8tZmlsbGVkCisgICAg
ICAgIEZyb3plblZhbHVlLAorICAgIH07CisKKyAgICBleHBsaWNpdCBMYXp5Tm9kZShOb2RlKiBu
b2RlID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2tpbmQoS2luZDo6Tm9kZSkKKyAgICB7CisgICAg
ICAgIHUuYXNOb2RlID0gbm9kZTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBMYXp5Tm9kZShGcm96
ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKKyAgICAgICAgOiAgbV9v
cChvcCkKKyAgICAgICAgLCBtX2tpbmQoS2luZDo6RnJvemVuVmFsdWUpCisgICAgeworICAgICAg
ICBBU1NFUlQodmFsdWUpOworICAgICAgICBBU1NFUlQob3AgPT0gSlNDb25zdGFudCB8fCBvcCA9
PSBEb3VibGVDb25zdGFudCB8fCBvcCA9PSBJbnQ1MkNvbnN0YW50KTsKKyAgICAgICAgdS5hc1Zh
bHVlID0gdmFsdWU7CisgICAgfQorCisgICAgTGF6eU5vZGUoc3RkOjpudWxscHRyX3QpCisgICAg
ICAgIDogbV9raW5kKEtpbmQ6Ok5vZGUpCisgICAgeworICAgICAgICB1LmFzTm9kZSA9IG51bGxw
dHI7CisgICAgfQorCisgICAgTGF6eU5vZGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgICAgICA6IG1fa2luZChLaW5kOjpOb2RlKQorICAgIHsKKyAgICAgICAgdS5hc05vZGUg
PSByZWludGVycHJldF9jYXN0PE5vZGUqPigtMSk7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09
IEtpbmQ6Ok5vZGUgJiYgdS5hc05vZGUgPT0gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4oLTEpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBLaW5kOjpGcm96ZW5WYWx1ZToKKyAgICAgICAgICAg
IHJldHVybiBXVEY6OlB0ckhhc2g8RnJvemVuVmFsdWUqPjo6aGFzaCh1LmFzVmFsdWUpOworICAg
ICAgICBjYXNlIEtpbmQ6Ok5vZGU6CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXUuYXNOb2Rl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSh1
LmFzTm9kZS0+aXNDb25zdGFudCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJI
YXNoPEZyb3plblZhbHVlKj46Omhhc2godS5hc05vZGUtPmNvbnN0YW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2godS5hc05vZGUpOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhenlOb2RlJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgS2luZDo6
Tm9kZToKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSh1LmFzTm9kZSAmJiB1LmFzTm9kZS0+aXND
b25zdGFudCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChvdGhlci5pc05vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyLnUuYXNOb2RlICYmIG90aGVyLT5vcCgpID09IHUu
YXNOb2RlLT5vcCgpICYmIG90aGVyLT5jb25zdGFudCgpID09IHUuYXNOb2RlLT5jb25zdGFudCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5tX29wID09IHUuYXNOb2RlLT5vcCgpICYm
IG90aGVyLnUuYXNWYWx1ZSA9PSB1LmFzTm9kZS0+Y29uc3RhbnQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBvdGhlci5pc05vZGUoKSAmJiB1LmFzTm9kZSA9PSBvdGhlci51
LmFzTm9kZTsKKworICAgICAgICBjYXNlIEtpbmQ6OkZyb3plblZhbHVlOgorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFvdGhlci5pc05vZGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3AgPT0gb3RoZXIubV9vcCAmJiB1LmFzVmFsdWUgPT0gb3RoZXIudS5hc1ZhbHVlOworICAgICAg
ICAgICAgcmV0dXJuIG90aGVyLnUuYXNOb2RlICYmIG1fb3AgPT0gb3RoZXItPm9wKCkgJiYgdS5h
c1ZhbHVlID09IG90aGVyLT5jb25zdGFudCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IExhenlOb2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzTm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZCA9PSBLaW5kOjpOb2RlOyB9CisKKyAgICBOb2RlKiBlbnN1cmVJ
c05vZGUoSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIEtpbmQ6OkZyb3plblZhbHVlOiB7CisgICAgICAgICAgICBzZXROb2RlKGluc2VydGlv
blNldC5pbnNlcnRDb25zdGFudChub2RlSW5kZXgsIGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmln
aW4sIHUuYXNWYWx1ZSwgbV9vcCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBLaW5kOjpOb2RlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGlz
Tm9kZSgpKTsKKworICAgICAgICByZXR1cm4gdS5hc05vZGU7CisgICAgfQorCisgICAgdm9pZCBz
ZXROb2RlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX2tpbmQgPSBLaW5kOjpOb2RlOwor
ICAgICAgICB1LmFzTm9kZSA9IG5vZGU7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Tm9kZSooKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTm9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IHUuYXNOb2RlOworICAgIH0KKworICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzTm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHUuYXNOb2RlOworICAg
IH0KKworICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNOb2RlKCkpOworICAgICAgICByZXR1cm4gKnUuYXNOb2RlOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
ICAgIGNhc2UgS2luZDo6RnJvemVuVmFsdWU6CisgICAgICAgICAgICBBU1NFUlQodS5hc1ZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBLaW5kOjpOb2RlOgor
ICAgICAgICAgICAgcmV0dXJuICF1LmFzTm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5
cGVkZWYgdm9pZCogKExhenlOb2RlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisKKyAgICBvcGVy
YXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIEtpbmQ6OkZyb3plblZhbHVlOgorICAgICAgICAgICAg
QVNTRVJUKHUuYXNWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxV
bnNwZWNpZmllZEJvb2xUeXBlKj4odS5hc1ZhbHVlKTsKKyAgICAgICAgY2FzZSBLaW5kOjpOb2Rl
OgorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlw
ZSo+KHUuYXNOb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBOb2RlVHlwZSBtX29wOjE2OworICAg
IEtpbmQgbV9raW5kOjE2OworICAgIHVuaW9uIHsKKyAgICAgICAgTm9kZSogYXNOb2RlOworICAg
ICAgICBGcm96ZW5WYWx1ZSogYXNWYWx1ZTsKKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkRGRzo6TGF6eU5vZGU6OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpERkc6OkxhenlOb2RlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6TGF6eU5v
ZGU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdMYXp5Tm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDU0YmZiNTJlNmMyYzIxYzRlZGEw
MGY1OTk3NTkwNGY3NzEzYjEwODUuLjFjZDZiMDllZmYyZDJhZTQ1YTE0YjVjMDcwMGRjNWJmNmEx
MWQ5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
UHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIGxvY2Fscywgc28g
aWdub3JlIHRoaXMuCiAgICAgfQogICAgIAotICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiwgTm9kZSogbm9kZSkKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExh
enlOb2RlIG5vZGUpCiAgICAgewogICAgICAgICBpZiAobG9jYXRpb24ua2luZCgpICE9IFN0YWNr
TG9jKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCBiODk3NDQwZGE5ZGM1OWY2
M2ExNzI5NDk1OTIwMzNlZTdiZGU4ZGUxLi4wYWIzMzFjMDVhMTAyYzljZjBmNDA3NTQ5MmJmNzNk
M2EwOTc4YjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtMTA5LDggKzEwOSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgZXNjYXBlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTGF6eU5vZGUgc291cmNlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc291cmNlLmlzTm9kZSgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxOb2RlKj4oc291cmNlKSA9PSBu
b2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2Fk
LiBJZ25vcmUgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzEsOCArMjMzLDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBMYXp5Tm9kZSBzb3VyY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2UuaXNOb2RlKCkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PE5vZGUqPihzb3VyY2Up
ID09IG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IGxvYWQuIElnbm9yZSBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzNiw3ICs0NDAsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIsIE5vZGUqKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253562</attachid>
            <date>2015-05-21 17:45:36 -0700</date>
            <delta_ts>2015-05-22 08:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145272-20150521174531.patch</filename>
            <type>text/plain</type>
            <size>55756</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjRjMmE4ZmEyZjc3NDIyZTI4Njg3ZWNlODJhZTg3NGYxNGRhZWZmLi4wM2YyOGE4YzE2YjM0MDBi
YTNiNmQ4MzIzYWE1N2M5OWFmY2YwZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNS0wNS0yMSAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgREZHQ2xvYmJlcml6ZSB0byByZXR1cm4gbm9uLW5v
ZGUgY29uc3RhbnRzIHRoYXQgbXVzdCBiZSBsYXRlciBjcmVhdGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUyNzIKKworICAgICAgICBUaGlzIGFk
ZHMgYSBuZXcgTGF6eU5vZGUgY2xhc3MgaW4gREZHIHRoYXQgcmVwcmVzZW50cyBlaXRoZXIgYSBO
b2RlKiwKKyAgICAgICAgb3IgYSBGcm96ZW5WYWx1ZSogd2l0aCBhIHdheSB0byBjb252ZXJ0IGl0
IHRvIGEgTm9kZSogcHJvdmlkZWQgYSBibG9jaworICAgICAgICB0byBpbnNlcnQgaXQgaW50by4g
REZHQ2xvYmJlcml6ZSBpcyBjb252ZXJ0ZWQgdG8gdXNlIExhenlOb2RlIGluc3RlYWQKKyAgICAg
ICAgb2YgTm9kZSogd2hlbiBkZWYoKSdpbmcgdmFsdWVzLCB3aGljaCBhbGxvd3MgdG8gbm93IGRl
ZmluZSB0aGUgYXJyYXkncworICAgICAgICBsZW5ndGggYXMgd2VsbCBhcyB0aGUgdmFsdWUgb2Yg
aXRzIHZhcmlvdXMgZmllbGRzIGluIE5ld0FycmF5IGFuZAorICAgICAgICBOZXdBcnJheUJ1ZmZl
ciBub2Rlcy4KKworICAgICAgICBXZSBhbHNvIGludHJvZHVjZSBhIFZlY3Rvcjx1aW50MzJfdD4g
aW4gREZHOjpHcmFwaCB0byBjb2xsZWN0IGFsbCB0aGUKKyAgICAgICAgdmFsdWVzIHRoYXQgY2Fu
IGJlIHVzZWQgYXMgaW5kZXgsIGluIG9yZGVyIHRvIGF2b2lkIGRlZigpJ2luZyB0b28gbWFueQor
ICAgICAgICB2YWx1ZXMgYXQgb25jZSBmb3IgYmlnIE5ld0FycmF5QnVmZmVycy4KKworICAgICAg
ICBIZWFwTG9jYXRpb24gaGFkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlIGEgTGF6eU5vZGUgYXMgaXRz
IGluZGV4IHRvIGJlCisgICAgICAgIGFibGUgdG8gZGVmaW5lIGFycmF5IHZhbHVlcy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmcmVlemVGcmFn
aWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExv
Y2F0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpIZWFwTG9jYXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OkhlYXBMb2NhdGlvbjo6aGFzaCk6CisgICAgICAgICogZGZnL0RGR0xhenlOb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmR1bXApOgorICAgICAgICAq
IGRmZy9ERkdMYXp5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6
TGF6eU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpzZXROb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlOb2RlOjppc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlO
b2RlOjpvcCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmFzTm9kZSk6CisgICAgICAg
IChKU0M6OkRGRzo6TGF6eU5vZGU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlO
b2RlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkxhenlOb2RlOjplbnN1cmVJc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2Rl
OjpvcGVyYXRvciBOb2RlKik6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Om9wZXJhdG9y
LT4pOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpERkc6OkxhenlOb2RlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlO
b2RlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKik6CisgICAgICAgIChKU0M6OkRGRzo6
TGF6eU5vZGU6OnNldEZyb3plblZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVB
ZGFwdG9yOjpkZWYpOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6
CisKIDIwMTUtMDUtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBCZXR0ZXIgb3B0aW1pemUgJ2lmJyB3aXRoIHRlcm5hcmllcyBjb25kaXRpb25hbCB0ZXN0cy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzZTYyMmEwNzgyMGZjOGU1ZmYw
YWRjMDdjMDU2YWZmNmM3NWRmMjgyLi4yMDNmNTQwZTg0ZjU4M2U3YmY5Y2VhMDIxOTU4MjM2NGY5
ZDUyOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODcsNiArMTg3
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHSnVtcFJlcGxhY2Vt
ZW50LmNwcAogICAgIGRmZy9ERkdMSUNNUGhhc2UuY3BwCiAgICAgZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcAorICAgIGRmZy9ERkdMYXp5Tm9kZS5jcHAKICAgICBkZmcvREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcAogICAgIGRmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAKICAgICBkZmcvREZHTG9v
cFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagppbmRleCBjZmE4ZDM4Njg5NTc4Y2MzMTU4OGFkYTk2Mjk3YjE2OGY1YjJiNzkwLi4z
NmNjNzM3MDRhNTgyNzlmZmNiNzE4Y2I5NDk4YjM3OWNkMmI5YTZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTQyMyw2ICs0MjMsNyBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVEZpbmFsaXplci5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHSnVtcFJlcGxhY2VtZW50LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMYXp5SlNWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eU5vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0xJQ01QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5jcHAiIC8+CkBAIC0xMTE1LDYgKzEx
MTYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVEZpbmFsaXplci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1ZhbHVlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eU5vZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDg4NTk1
MTI0OTQxNTU2MmE5YjQxZmRkOWQwNGY4YTIzMDU5MjY1MjMuLjkzZmU1ZTI2OTAzNzU2Yjk1YTc5
OGZhMTc1NWIzZDIzNGMyM2MwNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTExOTEsNiArMTE5MSw5IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTGF6eU5vZGUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9D
bENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTElDTVBoYXNlLmNw
cCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzU2
Miw2ICszNTY1LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMYXp5SlNW
YWx1ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eU5vZGUuaCI+CisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0xJQ01QaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFjOWQyNTgy
ZGY2MGU1N2M1NmYwMDBiZTA4MWJjN2FiZDcxYjQwYTUuLmU0ODgzM2M1Yzk4MWYxMDQ3ZmYwN2Rl
NjY1Mjg0OTYyY2ExNTkwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NjAs
NiArOTYwLDggQEAKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3Rh
YmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4
NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAq
LzsgfTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhFMUFE
RjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjJGMkFBMzcxQjBCRURFMzAwNjEwQzdBIC8q
IERGR0xhenlOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi87IH07
CisJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1
NENBIC8qIERGR0xhenlOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4
NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUxMTIyRkQxNDA0NkE0QzAwMkIxMDFEIC8qIEphdmFT
Y3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgKi87IH07CiAJCTY1MTEyMkZFMTQwNDZBNEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5
bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1
RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CkBAIC0yNjczLDYg
KzI2NzUsOCBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBGQkVGQjQgLyogSlNDLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50RGVzaXJlZE9mZnNldHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnREZXNpcmVkT2Zmc2V0cy5oOyBwYXRoID0g
TExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERGQjAwNDY4NzE0IC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRBdmFpbGFi
aWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJBOUEyOUUxQjBCRUQ0ODAw
QkQ1NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0xhenlOb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdM
YXp5Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMYXp5Tm9kZS5o
OyBwYXRoID0gZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVu
Y3Rpb25SYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
blJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MDdEMjk3MEU4NzFF
NEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVHlwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5ODksNiAr
NDk5Myw4IEBACiAJCQkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNl
bWVudC5oICovLAogCQkJCUE3M0E1MzU4MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1
ZS5jcHAgKi8sCiAJCQkJQTczQTUzNTkxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVl
LmggKi8sCisJCQkJNjJBOUEyOUUxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmNwcCAq
LywKKwkJCQk2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLywKIAkJ
CQlBN0Q5QTI5MjE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmNwcCAqLywKIAkJCQlB
N0Q5QTI5MzE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggKi8sCiAJCQkJQTdEODlD
RUMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCkBA
IC01ODY3LDYgKzU4NzMsNyBAQAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1
NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNjJGMkFBMzgxQjBCRURFMzAwNjEwQzdBIC8qIERGR0xhenlO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8q
IERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1
NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC03
MjQ3LDYgKzcyNTQsNyBAQAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRD
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBG
VExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjQxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYy
RjJBQTM3MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAK
aW5kZXggMTQxMzg0MzIyMjIyNzljYTg3YzRmZWJjYmM2ZmE1Y2FjMDViMTg4NC4uNDkyYWE2MmEy
YzcyNWRjOTM4OGE3M2IzYmNiZjI2ZmM4YTQzNTE0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUq
IGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAgICAgIExhenlOb2Rl
IGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW1wdXJlTGVuZ3RoOyBpLS07KSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1faW1wdXJlTWFwW2ldLmtleSA9PSBsb2NhdGlvbikKQEAgLTE1NywxOCAr
MTU3LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogICAgIAotICAgICAgICBOb2RlKiBhZGRJbXB1cmUoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBO
b2RlKiBub2RlKQorICAgICAgICBMYXp5Tm9kZSBhZGRJbXB1cmUoSGVhcExvY2F0aW9uIGxvY2F0
aW9uLCBMYXp5Tm9kZSBub2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoTm9kZSogcmVz
dWx0ID0gZmluZFJlcGxhY2VtZW50KGxvY2F0aW9uKSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBhcmUgdXNpbmcgc21hbGwgbWFwcywgd2UgbXVzdCBub3QgZGVmKCkgZGVyaXZlZCB2YWx1
ZXMuCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoZSBvbmx5IGRlcml2ZWQgdmFsdWVzIHdlIGRl
ZigpIGFyZSBjb25zdGFudC1iYXNlZC4KKyAgICAgICAgICAgIGlmIChsb2NhdGlvbi5pbmRleCgp
ICYmICFsb2NhdGlvbi5pbmRleCgpLmlzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgaWYgKExhenlOb2RlIHJlc3VsdCA9IGZpbmRSZXBsYWNlbWVu
dChsb2NhdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
IEFTU0VSVChtX2ltcHVyZUxlbmd0aCA8IGNhcGFjaXR5KTsKLSAgICAgICAgICAgIG1faW1wdXJl
TWFwW21faW1wdXJlTGVuZ3RoKytdID0gV1RGOjpLZXlWYWx1ZVBhaXI8SGVhcExvY2F0aW9uLCBO
b2RlKj4obG9jYXRpb24sIG5vZGUpOworICAgICAgICAgICAgbV9pbXB1cmVNYXBbbV9pbXB1cmVM
ZW5ndGgrK10gPSBXVEY6OktleVZhbHVlUGFpcjxIZWFwTG9jYXRpb24sIExhenlOb2RlPihsb2Nh
dGlvbiwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAg
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPFB1cmVWYWx1ZSwgTm9k
ZSo+IG1fcHVyZU1hcFtjYXBhY2l0eV07Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEhlYXBM
b2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwW2NhcGFjaXR5XTsKKyAgICAgICAgV1RGOjpLZXlW
YWx1ZVBhaXI8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gbV9pbXB1cmVNYXBbY2FwYWNpdHldOwog
ICAgICAgICB1bnNpZ25lZCBtX3B1cmVMZW5ndGg7CiAgICAgICAgIHVuc2lnbmVkIG1faW1wdXJl
TGVuZ3RoOwogICAgIH07CkBAIC0xOTgsMTIgKzIwMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCisgICAg
ICAgIExhenlOb2RlIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2ltcHVyZU1hcC5nZXQobG9jYXRpb24pOwogICAg
ICAgICB9CiAgICAgCi0gICAgICAgIE5vZGUqIGFkZEltcHVyZShIZWFwTG9jYXRpb24gbG9jYXRp
b24sIE5vZGUqIG5vZGUpCisgICAgICAgIExhenlOb2RlIGFkZEltcHVyZShIZWFwTG9jYXRpb24g
bG9jYXRpb24sIExhenlOb2RlIG5vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9pbXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKTsKICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTIxMyw3ICsyMTcsNyBAQCBwcml2YXRlOgogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSGFzaE1hcDxQdXJlVmFsdWUsIE5vZGUqPiBtX3B1cmVNYXA7Ci0gICAg
ICAgIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBOb2RlKj4gbV9pbXB1cmVNYXA7CisgICAgICAgIEhh
c2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gbV9pbXB1cmVNYXA7CiAgICAgfTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1hcHM+CkBAIC0yMjEsNiArMjI1LDcgQEAgcHJpdmF0ZToKICAg
ICBwdWJsaWM6CiAgICAgICAgIEJsb2NrQ1NFKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgIDog
bV9ncmFwaChncmFwaCkKKyAgICAgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgIApAQCAtMjI4LDYgKzIzMyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fbWFwcy5jbGVhcigpOwogICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIG1fbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwpAQCAtMjk3LDYgKzMwMyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgICAgICB9
CkBAIC0zMTgsOSArMzI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0
aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9u
LCBMYXp5Tm9kZSB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBt
X21hcHMuYWRkSW1wdXJlKGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgICAgICBMYXp5Tm9kZSBt
YXRjaCA9IG1fbWFwcy5hZGRJbXB1cmUobG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgICAgIGlm
ICghbWF0Y2gpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTM0Myw4ICsz
NTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aCht
YXRjaCk7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHZh
bHVlLmlzTm9kZSgpICYmIHN0YXRpY19jYXN0PE5vZGUqPih2YWx1ZSkgPT0gbV9ub2RlKSB7Cisg
ICAgICAgICAgICAgICAgbWF0Y2guZW5zdXJlSXNOb2RlKG1faW5zZXJ0aW9uU2V0LCBtX2Jsb2Nr
LCAwKS0+b3duZXIgPSBtX2Jsb2NrOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxOb2RlKj4obWF0Y2gpKTsKKyAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHN0
YXRpY19jYXN0PE5vZGUqPihtYXRjaCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAKICAgICBwcml2YXRlOgpAQCAtMzUy
LDggKzM2NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgYm9vbCBtX2NoYW5nZWQ7
CiAgICAgICAgIE5vZGUqIG1fbm9kZTsKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAg
ICAKICAgICAgICAgTWFwcyBtX21hcHM7CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OwogICAgIH07CiAKICAgICBCbG9ja0NTRTxTbWFsbE1hcHM+IG1fc21hbGxCbG9jazsK
QEAgLTM2NSw2ICszODAsNyBAQCBwdWJsaWM6CiAgICAgR2xvYmFsQ1NFUGhhc2UoR3JhcGgmIGdy
YXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9u
IGVsaW1pbmF0aW9uIikKICAgICAgICAgLCBtX2ltcHVyZURhdGFNYXAoZ3JhcGgpCisgICAgICAg
ICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTQyOSw2ICs0
NDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBibG9j
ayAiLCAqbV9ibG9jaywgIjpcbiIpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICBt
X25vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIExvb2tpbmcgYXQgbm9kZSAiLCBt
X25vZGUsICI6XG4iKTsKQEAgLTQ0MSw2ICs0NTgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbV9ub2Rl
LCAqdGhpcyk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4
ZWN1dGUobV9ibG9jayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW1wdXJlRGF0YS0+
ZGlkVmlzaXQgPSB0cnVlOwogICAgICAgICB9CkBAIC00ODYsMTMgKzUwNSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG1fbm9kZSk7CiAgICAgfQog
ICAgIAotICAgIE5vZGUqIGZpbmRSZXBsYWNlbWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCisg
ICAgTGF6eU5vZGUgZmluZFJlcGxhY2VtZW50KEhlYXBMb2NhdGlvbiBsb2NhdGlvbikKICAgICB7
CiAgICAgICAgIC8vIEF0IHRoaXMgaW5zdGFudCwgb3VyICJhdmFpbGFibGVBdFRhaWwiIHJlZmxl
Y3RzIHRoZSBzZXQgb2YgdGhpbmdzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbgogICAgICAgICAvLyB0
aGlzIGJsb2NrIHNvIGZhci4gV2UgY2hlY2sgdGhpcyBtYXAgdG8gZmluZCBibG9jay1sb2NhbCBD
U0Ugb3Bwb3J0dW5pdGllcyBiZWZvcmUgZG9pbmcKICAgICAgICAgLy8gYSBnbG9iYWwgc2VhcmNo
LgotICAgICAgICBOb2RlKiBtYXRjaCA9IG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmdl
dChsb2NhdGlvbik7Ci0gICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICBMYXp5Tm9kZSBtYXRj
aCA9IG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmdldChsb2NhdGlvbik7CisgICAgICAg
IGlmICghIW1hdGNoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICBGb3VuZCBsb2NhbCBtYXRjaDogIiwgbWF0Y2gsICJcbiIpOwogICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOwpAQCAtNTc1LDcgKzU5NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBtYXRjaCA9IGRhdGEuYXZhaWxhYmxlQXRUYWlsLmdldChsb2NhdGlvbik7CiAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgQXZhaWxhYmlsaXR5OiAiLCBtYXRjaCwgIlxuIik7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCEhbWF0Y2gpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgZXhhbWluZSB0aGUgcHJlZGVjZXNzb3JzIG9mIGEgbWF0Y2guIEF0
IHRoaXMgcG9pbnQgd2UganVzdCB3YW50IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGVzdGFi
bGlzaCB0aGF0IG90aGVyIGJsb2NrcyBvbiB0aGUgcGF0aCBmcm9tIGhlcmUgdG8gdGhlcmUgZG9u
J3QgY2xvYmJlcgogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbG9jYXRpb24gd2UncmUgaW50
ZXJlc3RlZCBpbi4KQEAgLTYxNiwxMiArNjM1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1hdGNoOwogICAgIH0KICAgICAKLSAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24s
IE5vZGUqIHZhbHVlKQorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5v
ZGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBHb3QgaGVhcCBsb2NhdGlvbiBkZWY6ICIsIGxvY2F0aW9uLCAiIC0+ICIsIHZhbHVl
LCAiXG4iKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG1hdGNoID0gZmluZFJlcGxhY2VtZW50
KGxvY2F0aW9uKTsKKyAgICAgICAgTGF6eU5vZGUgbWF0Y2ggPSBmaW5kUmVwbGFjZW1lbnQobG9j
YXRpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICBHb3QgbWF0Y2g6ICIsIG1hdGNoLCAiXG4iKTsKQEAgLTYzMyw5ICs2NTIsMzMg
QEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05l
d0VudHJ5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbV9ub2RlLT5yZXBsYWNlV2l0aChtYXRjaCk7Ci0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisKKyAgICAgICAgaWYgKHZhbHVlLmlzTm9kZSgpICYmIHN0YXRpY19jYXN0PE5vZGUqPih2YWx1
ZSkgPT0gbV9ub2RlKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoLmlzTm9kZSgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwcm9wZXJseSByZWNvcmQgdGhlIGNvbnN0YW50IGlu
IG9yZGVyIHRvIHVzZSBhbiBleGlzdGluZyBvbmUgaWYgYXBwbGljYWJsZS4KKyAgICAgICAgICAg
ICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCByZS1ydW5uaW5nIEdDU0Ugd2lsbCBub3QgZmluZCBu
ZXcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBtYXRjaC5lbnN1cmVJc05vZGUobV9p
bnNlcnRpb25TZXQsIG1fYmxvY2ssIG1fbm9kZUluZGV4KS0+b3duZXIgPSBtX2Jsb2NrOworICAg
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9wdXJlVmFsdWVzLmFkZChQdXJlVmFsdWUoc3Rh
dGljX2Nhc3Q8Tm9kZSo+KG1hdGNoKSwgbWF0Y2gtPmNvbnN0YW50KCkpLCBWZWN0b3I8Tm9kZSo+
KCkpOworICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3Jz
LmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoLnNldE5vZGUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlZCkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RhdGljX2Nhc3Q8Tm9kZSo+
KG1hdGNoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
Tm9kZSo+KG1hdGNoKSk7CisgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKHN0YXRpY19j
YXN0PE5vZGUqPihtYXRjaCkpOworICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKQEAgLTY1Niw4
ICs2OTksMTAgQEAgcHVibGljOgogICAgIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAg
Tm9kZSogbV9ub2RlOworICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIEltcHVyZUJsb2Nr
RGF0YSogbV9pbXB1cmVEYXRhOwogICAgIENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICBJ
bnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAgCiAgICAgYm9vbCBtX2NoYW5nZWQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA1MjNkNzIz
YjU3MGFjNTAwNmRlOGNhMDFkY2ExY2EwZjRkNGUzMzg2Li45MTk3ZTQ1MjMzZDViNWQ2MGUxZGQ5
OTI5ZmU4ZTI1ODBkNjM3NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJERkdMYXp5Tm9kZS5oIgogI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xOTUsNyArMTk2LDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJl
YWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGll
cywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlBy
b3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZWFkKEhlYXApOwpAQCAtMjA2LDcgKzIwNyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5k
ZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBub2RlLT5j
aGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVhZChIZWFwKTsKQEAgLTIx
Nyw3ICsyMTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1v
ZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cyk7Ci0gICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlM
b2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQx
KCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoSGVhcCk7CkBAIC0zMDMsNyAr
MzA0LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgCiAgICAgY2FzZSBJbnZh
bGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKLSAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9p
bnRfZmlyZSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBG
bHVzaDoKQEAgLTM1NCwxNyArMzU1LDE3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAKICAg
ICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFySW5qZWN0aW9uV2F0Y2hwb2ludExvYywgTWlz
Y0ZpZWxkcyksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhckluamVjdGlvbldh
dGNocG9pbnRMb2MsIE1pc2NGaWVsZHMpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhc2UgSXNPYmplY3RPck51bGw6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RPck51bGxMb2MsIE1pc2NGaWVsZHMs
IG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNPYmpl
Y3RPck51bGxMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgSXNGdW5jdGlvbjoKICAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9u
TG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKElzRnVuY3Rpb25Mb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlJ
ZDoKQEAgLTM5MSw0NSArMzkyLDQ1IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAg
IAogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRl
ciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0
ZXJMb2MsIEdldHRlclNldHRlcl9nZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9k
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2V0dGVyOgogICAg
ICAgICByZWFkKEdldHRlclNldHRlcl9zZXR0ZXIpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFNldHRlckxvYywgR2V0dGVyU2V0dGVyX3NldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsK
KyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIs
IG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6Q2FsbGVlKSksIG5vZGUpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNh
bGxlZSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRBcmd1bWVudENvdW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
UGF5bG9hZExvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSks
IG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJzdHJh
Y3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwg
bm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFw
KFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAg
ICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKICAgICAgICAgcmVhZChoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgaGVhcCksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFw
KSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
CkBAIC00NTYsNyArNDU3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3Rh
Y2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ss
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewpAQCAtNDkxLDE5ICs0OTIsMTkgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpEaXJlY3RBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3Bl
cnRpZXMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSksIG5vZGUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlM
b2MsIERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFk
KFNjb3BlUHJvcGVydGllcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5
TG9jLCBTY29wZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExh
enlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkg
ewogICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAg
ICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGll
cywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3Bl
cnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFk
KFdvcmxkKTsKQEAgLTUxNCw3ICs1MTUsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
ICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5k
ZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNTI1LDcgKzUy
Niw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICBpZiAobW9kZS5pc0lu
Qm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKLSAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBu
b2RlKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hp
bGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC01NTQsNyArNTU1LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogog
ICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5UHJvcGVydGllcyk7CiAgICAgICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVy
dHlMb2MsIFR5cGVkQXJyYXlQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5
TG9jLCBUeXBlZEFycmF5UHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigp
KSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02MDUsNyArNjA2LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3Bl
cnRpZXMpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCkpCiAgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMy
UHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwg
aW5kZXgpLCBMYXp5Tm9kZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTYyMCw3ICs2MjEsNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZERvdWJsZVByb3Bl
cnRpZXMpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCkpCiAgICAgICAgICAgICAgICAgd3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJs
ZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNl
LCBpbmRleCksIExhenlOb2RlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKQEAgLTYzNSw3ICs2MzYsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZENvbnRp
Z3VvdXNQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlT
dG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIElu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CisgICAgICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3Vv
dXNQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIExhenlOb2RlKHZhbHVlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgpAQCAtNjgxLDEyICs2ODIsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKIAogICAgIGNh
c2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5
cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNo
aWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIElu
c3RhbmNlT2Y6CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbnN0YW5jZU9mTG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluc3RhbmNlT2ZMb2MsIEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IFB1dFN0cnVjdHVyZToKQEAgLTY5OCwxOCArNjk5LDE4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgIAogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAg
IHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0
dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHks
IG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChK
U09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5
LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRl
cmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5v
ZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToK
ICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0
dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEFycmF5aWZ5OgpAQCAtNzI5LDEyICs3MzAsMTIgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0Zp
ZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9m
ZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRCeU9mZnNldDoKQEAgLTc0Miw3ICs3NDMsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3Qg
V3JpdGVGdQogICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBBYnN0cmFjdEhlYXAgaGVh
cChOYW1lZFByb3BlcnRpZXMsIGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICByZWFkKGhlYXAp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUt
PmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0
eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNzUxLDcgKzc1Miw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgQWJz
dHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLmlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9k
ZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgICAgIApAQCAtNzY0LDcgKzc2NSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdy
aXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQ
cm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUt
PmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNzcyLDcgKzc3Myw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLmlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIEFic3RyYWN0SGVhcCBo
ZWFwKE5hbWVkUHJvcGVydGllcywgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgIHdyaXRlKGhl
YXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5v
ZGUtPmNoaWxkMigpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihOYW1lZFByb3BlcnR5TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2Rl
KG5vZGUtPmNoaWxkMygpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAg
ICAKQEAgLTc4NSw3ICs3ODYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6CiAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxk
MSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTc5NSw2MyArNzk2LDE1MCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQo
TWlzY0ZpZWxkcyk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9j
LCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0g
Tm90VHlwZWRBcnJheSk7CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hp
bGQxKCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhM
b2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldENs
b3N1cmVWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9k
ZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENs
b3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2Nv
cGVPZmZzZXQoKS5vZmZzZXQoKSksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoU2NvcGVQcm9w
ZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpKSwgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRD
bG9zdXJlVmFyOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBu
b2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24o
Q2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5z
Y29wZU9mZnNldCgpLm9mZnNldCgpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSks
IG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAg
ICAgIEFic3RyYWN0SGVhcCBoZWFwKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkpOwogICAgICAgICByZWFkKGhlYXApOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIG5vZGUp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIExh
enlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRUb0FyZ3VtZW50czogewogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChEaXJlY3RBcmd1
bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgp
KTsKICAgICAgICAgd3JpdGUoaGVhcCk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oRGlyZWN0
QXJndW1lbnRzTG9jLCBoZWFwKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihEaXJlY3RBcmd1bWVudHNMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBu
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2Jh
bFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRl
cigpKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9j
LCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIExhenlO
b2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2Jh
bFZhcjoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT52YXJpYWJs
ZVBvaW50ZXIoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9j
LCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFi
bGVMb2MsIEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSwg
TGF6eU5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKIAotICAg
IGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAgIGNhc2UgTmV3
QXJyYXlCdWZmZXI6CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgotICAgICAgICAvLyBGSVhNRTog
RW5hYmxlIENTRSBmb3IgdGhlc2Ugbm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJl
Y2F1c2UgdGhlcmUgaXMgbm8gd2F5Ci0gICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRl
eCBub2RlIGFuZCBhIHZhbHVlIG5vZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxv
d2VyZWQKLSAgICAgICAgLy8gdGhlc2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJs
ZSB3YXkgb2YgZGVmKCknaW5nLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAg
ICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2Fz
ZSBOZXdBcnJheTogeworICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdy
aXRlKEhlYXBPYmplY3RDb3VudCk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBu
b2RlLT5udW1DaGlsZHJlbigpOworCisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5n
dGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUpLAorICAgICAgICAgICAgTGF6eU5v
ZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKG51bUVsZW1lbnRzKSkpKTsKKworICAgICAgICBpZiAo
IW51bUVsZW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGhlYXAgPSBJbmRl
eGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRJbnQz
MlByb3BlcnRpZXM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRDb250aWd1
b3VzUHJvcGVydGllczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobnVtRWxlbWVudHMg
PCBncmFwaC5tX3VpbnQzMlZhbHVlc0luVXNlLnNpemUoKSkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG51bUVsZW1lbnRzOyArK29wZXJh
bmRJZHgpIHsKKyAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdy
YXBoLmZyZWV6ZShqc051bWJlcihvcGVyYW5kSWR4KSkpKSwKKyAgICAgICAgICAgICAgICAgICAg
TGF6eU5vZGUodXNlLm5vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZm9yICh1aW50MzJfdCBvcGVyYW5kSWR4IDogZ3JhcGgubV91aW50MzJWYWx1
ZXNJblVzZSkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kSWR4ID49IG51bUVsZW1lbnRz
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBFZGdlIHVz
ZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElk
eF07CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2Ms
IGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihvcGVyYW5kSWR4KSkp
KSwKKyAgICAgICAgICAgICAgICAgICAgTGF6eU5vZGUodXNlLm5vZGUoKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIE5ld0Fy
cmF5QnVmZmVyOiB7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3Jp
dGUoSGVhcE9iamVjdENvdW50KTsKKworICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5v
ZGUtPm51bUNvbnN0YW50cygpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3Ro
TG9jLCBCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBub2RlKSwKKyAgICAgICAgICAgIExhenlOb2Rl
KGdyYXBoLmZyZWV6ZShqc051bWJlcihudW1FbGVtZW50cykpKSk7CisKKyAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXA7CisgICAgICAgIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudDsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9ET1VCTEVf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZERvdWJsZVByb3BlcnRp
ZXM7CisgICAgICAgICAgICBvcCA9IERvdWJsZUNvbnN0YW50OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBo
ZWFwID0gSW5kZXhlZEludDMyUHJvcGVydGllczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFw
ID0gSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IEpTVmFsdWUqIGRhdGEgPSBncmFwaC5tX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS0+
c3RhcnRDb25zdGFudCgpKTsKKyAgICAgICAgaWYgKG51bUVsZW1lbnRzIDwgZ3JhcGgubV91aW50
MzJWYWx1ZXNJblVzZS5zaXplKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IG51bUVsZW1lbnRzOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdy
YXBoLmZyZWV6ZShqc051bWJlcihpbmRleCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlO
b2RlKGdyYXBoLmZyZWV6ZShkYXRhW2luZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGluZGV4IDogZ3JhcGgubV91
aW50MzJWYWx1ZXNJblVzZSkgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBudW1FbGVt
ZW50cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdy
YXBoLmZyZWV6ZShqc051bWJlcihpbmRleCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlO
b2RlKGdyYXBoLmZyZWV6ZShkYXRhW2luZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhc2UgTmV3T2JqZWN0OgogICAg
IGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpAQCAtMTAzOSw3ICsx
MTI3LDcgQEAgcHVibGljOgogICAgICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUp
IGNvbnN0CisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5v
ZGUgbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2Rl
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDk1NGMy
MjhmYmEzMzNhODFlZDQzNGM2NmIzZTNhOGFiNjBkMzQ0OWUuLjA4YTc4YzE1MmE5NWE2YTY2N2Y1
NjVjMGM0YTE4MzhmZGU4OGQwYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCkBAIC0xMjEwLDYgKzEyMTAsOSBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZUZyYWdp
bGUoSlNWYWx1ZSB2YWx1ZSkKICAgICBhdXRvIHJlc3VsdCA9IG1fZnJvemVuVmFsdWVNYXAuYWRk
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIG51bGxwdHIpOwogICAgIGlmIChMSUtFTFkoIXJlc3Vs
dC5pc05ld0VudHJ5KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaXNVSW50MzIoKSkpCisgICAgICAgIG1fdWludDMyVmFs
dWVzSW5Vc2UuYXBwZW5kKHZhbHVlLmFzVUludDMyKCkpOwogICAgIAogICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9mcm96ZW5WYWx1ZXMuYWRkKEZyb3plblZhbHVlOjpmcmVl
emUodmFsdWUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCA2NWE2
M2UwYjNkNDRkZGYxY2YzMmVkYmUyNzM0MDU1NjVjODEzNGM0Li5iYWM1MzhmMDI1ZDNlY2UxMzdi
ZTMxNzgwNjg4MTVkOTUzN2M5NWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CkBAIC04MDYsNiArODA2LDggQEAgcHVibGljOgogCiAgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1
ZSwgRnJvemVuVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRy
YWl0cz4gbV9mcm96ZW5WYWx1ZU1hcDsKICAgICBCYWc8RnJvemVuVmFsdWU+IG1fZnJvemVuVmFs
dWVzOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX3VpbnQzMlZhbHVlc0luVXNlOwogICAgIAog
ICAgIEJhZzxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCmluZGV4IGNlMjdlZjRi
ZjcxOWI3Y2QwZDlhMDRiNmVjYTE5ODU2MzZlYzEyMjMuLjNkM2E5NGNjZjEzODYxODI3ZWMyOGM5
MTU3ZDU2YTIyMTRmNmFhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHTGF6eU5vZGUuaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTY0
LDcgKzY1LDcgQEAgcHVibGljOgogICAgIEhlYXBMb2NhdGlvbigKICAgICAgICAgTG9jYXRpb25L
aW5kIGtpbmQgPSBJbnZhbGlkTG9jYXRpb25LaW5kLAogICAgICAgICBBYnN0cmFjdEhlYXAgaGVh
cCA9IEFic3RyYWN0SGVhcCgpLAotICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSog
aW5kZXggPSBudWxscHRyKQorICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTGF6eU5vZGUg
aW5kZXggPSBMYXp5Tm9kZSgpKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1f
aGVhcChoZWFwKQogICAgICAgICAsIG1fYmFzZShiYXNlKQpAQCAtNzQsNiArNzUsMTEgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQoISFtX2hlYXAgfHwgIW1fYmFzZSk7CiAgICAgICAgIEFTU0VS
VChtX2Jhc2UgfHwgIW1faW5kZXgpOwogICAgIH0KKworICAgIEhlYXBMb2NhdGlvbihMb2NhdGlv
bktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhlYXAsIE5vZGUqIGJhc2UsIE5vZGUqIGluZGV4KQor
ICAgICAgICA6IEhlYXBMb2NhdGlvbihraW5kLCBoZWFwLCBiYXNlLCBMYXp5Tm9kZShpbmRleCkp
CisgICAgeworICAgIH0KICAgICAKICAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQs
IEFic3RyYWN0SGVhcCBoZWFwLCBFZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCiAgICAg
ICAgIDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkp
CkBAIC05MywxMSArOTksMTEgQEAgcHVibGljOgogICAgIExvY2F0aW9uS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25zdCB7IHJl
dHVybiBtX2hlYXA7IH0KICAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9
Ci0gICAgTm9kZSogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTGF6eU5v
ZGUgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9raW5kICsgbV9oZWFwLmhhc2go
KSArIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9pbmRleCkgKyBtX2tpbmQ7CisgICAgICAg
IHJldHVybiBtX2tpbmQgKyBtX2hlYXAuaGFzaCgpICsgbV9pbmRleC5oYXNoKCkgKyBtX2tpbmQ7
CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRpb24mIG90
aGVyKSBjb25zdApAQCAtMTE5LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jYXRpb25LaW5k
IG1fa2luZDsKICAgICBBYnN0cmFjdEhlYXAgbV9oZWFwOwogICAgIE5vZGUqIG1fYmFzZTsKLSAg
ICBOb2RlKiBtX2luZGV4OworICAgIExhenlOb2RlIG1faW5kZXg7CiB9OwogCiBzdHJ1Y3QgSGVh
cExvY2F0aW9uSGFzaCB7CkBAIC0xNDgsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxK
U0MKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEhhc2hNYXA8
SGVhcExvY2F0aW9uLCBOb2RlKj4gSW1wdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPEhlYXBMb2Nh
dGlvbiwgTGF6eU5vZGU+IEltcHVyZU1hcDsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1
NGVkOTg1NWQ1ZWUyYTUzNjJhOWMxN2I3YTU3MzE0YjJhMjU0NjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmNwcApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xhenlOb2RlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIExhenlOb2Rl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgb3V0LnByaW50KCJMYXp5Tm9kZTowIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc05v
ZGUoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiTGF6eU5vZGU6QCIsIGFzTm9kZSgpLT5pbmRl
eCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCJMYXp5Tm9kZTpGcm96
ZW5WYWx1ZToiLCBHcmFwaDo6b3BOYW1lKG9wKCkpLCAiLCAiLCBwb2ludGVyRHVtcChhc1ZhbHVl
KCkpKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eU5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWJiYTc2YjVmN2M3MzRlYzQyOWYw
Njc1MWE1ZGMxODZlYTVjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5Tm9kZS5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdMYXp5Tm9kZV9oCisjZGVm
aW5lIERGR0xhenlOb2RlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworCisKK2Ns
YXNzIExhenlOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGpzQ29uc3Rh
bnRUYWcgPSAwOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZG91YmxlQ29uc3RhbnRUYWcgPSAx
OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW50NTJDb25zdGFudFRhZyA9IDI7CisKKyAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IHRhZ01hc2sgPSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVp
bnRwdHJfdCBwb2ludGVyTWFzayA9IH50YWdNYXNrOworCisgICAgZXhwbGljaXQgTGF6eU5vZGUo
Tm9kZSogbm9kZSA9IG51bGxwdHIpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwg
bV92YWx1ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obnVsbHB0cikpCisgICAgeworICAg
ICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBzZXRGcm96
ZW5WYWx1ZShub2RlLT5jb25zdGFudCgpLCBub2RlLT5vcCgpKTsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBMYXp5Tm9kZShGcm96ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFu
dCkKKyAgICAgICAgOiBtX25vZGUobnVsbHB0cikKKyAgICAgICAgLCBtX3ZhbHVlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihudWxscHRyKSkKKyAgICB7CisgICAgICAgIHNldEZyb3plblZh
bHVlKHZhbHVlLCBvcCk7CisgICAgfQorCisgICAgTGF6eU5vZGUoc3RkOjpudWxscHRyX3QpCisg
ICAgICAgIDogbV9ub2RlKG51bGxwdHIpCisgICAgICAgICwgbV92YWx1ZShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obnVsbHB0cikpCisgICAgeworICAgIH0KKworICAgIExhenlOb2RlKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX25vZGUocmVpbnRlcnBy
ZXRfY2FzdDxOb2RlKj4oLTEpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vZGUoTm9k
ZSogbm9kZSkKKyAgICB7CisgICAgICAgIG1fbm9kZSA9IG5vZGU7CisgICAgICAgIGlmIChub2Rl
ICYmIG5vZGUtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHNldEZyb3plblZhbHVlKG5vZGUt
PmNvbnN0YW50KCksIG5vZGUtPm9wKCkpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gcmVpbnRlcnByZXRfY2FzdDxO
b2RlKj4oLTEpOyB9CisKKyAgICBib29sIGlzTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQorCisgICAgTm9kZVR5cGUgb3AoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBtX25vZGUtPm9wKCk7CisKKyAgICAgICAgc3dpdGNoIChtX3Zh
bHVlICYgdGFnTWFzaykgeworICAgICAgICBjYXNlIGpzQ29uc3RhbnRUYWc6CisgICAgICAgICAg
ICByZXR1cm4gSlNDb25zdGFudDsKKyAgICAgICAgY2FzZSBkb3VibGVDb25zdGFudFRhZzoKKyAg
ICAgICAgICAgIHJldHVybiBEb3VibGVDb25zdGFudDsKKyAgICAgICAgY2FzZSBpbnQ1MkNvbnN0
YW50VGFnOgorICAgICAgICAgICAgcmV0dXJuIEludDUyQ29uc3RhbnQ7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgTm9kZSogYXNOb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX25vZGUgfHwgIWFzVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBtX25vZGU7CisgICAgfQor
CisgICAgRnJvemVuVmFsdWUqIGFzVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8RnJvemVuVmFsdWUqPihtX3ZhbHVlICYgcG9pbnRlck1hc2spOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGFz
VmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8RnJvemVuVmFsdWUqPjo6
aGFzaChhc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFz
aChtX25vZGUpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXp5Tm9kZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYXNWYWx1ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZSA9
PSBvdGhlci5tX25vZGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExhenlO
b2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBOb2RlKiBlbnN1cmVJc05vZGUoSW5zZXJ0aW9uU2V0JiBpbnNlcnRp
b25TZXQsIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAg
ICAgICBpZiAoIW1fbm9kZSkKKyAgICAgICAgICAgIG1fbm9kZSA9IGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudChub2RlSW5kZXgsIGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4sIGFzVmFs
dWUoKSwgb3AoKSk7CisKKyAgICAgICAgcmV0dXJuIGFzTm9kZSgpOworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIE5vZGUqKCkgY29uc3QgeyByZXR1cm4gYXNOb2RlKCk7IH0KKworICAg
IE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBhc05vZGUoKTsgfQorCisgICAgTm9k
ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmFzTm9kZSgpOyB9CisKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFhc1ZhbHVlKCkgJiYgIWFzTm9kZSgpOyB9CisKKyAg
ICB0eXBlZGVmIHZvaWQqIChMYXp5Tm9kZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworCisgICAg
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEhKnRoaXMgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6
IDA7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZvaWQgc2V0RnJvemVuVmFsdWUoRnJvemVuVmFsdWUqIHZhbHVlLCBOb2Rl
VHlwZSBvcCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIG1fdmFsdWUg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOworICAgICAgICBBU1NFUlQobV92
YWx1ZSA9PSAobV92YWx1ZSAmIHBvaW50ZXJNYXNrKSk7CisgICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgbV92YWx1ZSB8PSBqc0NvbnN0
YW50VGFnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6
CisgICAgICAgICAgICBtX3ZhbHVlIHw9IGRvdWJsZUNvbnN0YW50VGFnOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICAgICAgICAgIG1fdmFsdWUg
fD0gaW50NTJDb25zdGFudFRhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSogbV9ub2RlOworICAgIHVpbnRw
dHJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpMYXp5Tm9kZT4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpERkc6OkxhenlOb2RlPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTGF6eU5vZGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUu
aAppbmRleCA1NGJmYjUyZTZjMmMyMWM0ZWRhMDBmNTk5NzU5MDRmNzcxM2IxMDg1Li4xY2Q2YjA5
ZWZmMmQyYWU0NWExNGI1YzA3MDBkYzViZjZhMTFkOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFB1cmVWYWx1ZSBkZWZzIG5ldmVyIGhhdmUgYW55
dGhpbmcgdG8gZG8gd2l0aCBsb2NhbHMsIHNvIGlnbm9yZSB0aGlzLgogICAgIH0KICAgICAKLSAg
ICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBk
ZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQogICAgIHsKICAgICAgICAg
aWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBTdGFja0xvYykKICAgICAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHAKaW5kZXggYjg5NzQ0MGRhOWRjNTlmNjNhMTcyOTQ5NTkyMDMzZWU3YmRlOGRlMS4uMGFi
MzMxYzA1YTEwMmM5Y2YwZjQwNzU0OTJiZjczZDNhMDk3OGI5YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKQEAgLTEw
OSw4ICsxMDksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIExhenlO
b2RlIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNvdXJjZS5pc05vZGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8Tm9kZSo+KHNvdXJjZSkgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtMjMxLDggKzIzMywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNv
dXJjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gbm9kZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
TGF6eU5vZGUgc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc291cmNlLmlzTm9kZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxOb2RlKj4oc291cmNlKSA9PSBub2RlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CkBAIC00MzYsNyArNDQwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBOb2RlKikgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAg
ICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253589</attachid>
            <date>2015-05-22 08:14:27 -0700</date>
            <delta_ts>2015-05-22 09:35:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145272-20150522081421.patch</filename>
            <type>text/plain</type>
            <size>55539</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjRjMmE4ZmEyZjc3NDIyZTI4Njg3ZWNlODJhZTg3NGYxNGRhZWZmLi5lYzcyODQ0ZGQzMzYwOGRi
MzFhMzc2YjhjMDY2MTUwNjBiZmVjM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNS0wNS0yMiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgREZHQ2xvYmJlcml6ZSB0byByZXR1cm4gbm9uLW5v
ZGUgY29uc3RhbnRzIHRoYXQgbXVzdCBiZSBsYXRlciBjcmVhdGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUyNzIKKworICAgICAgICBUaGlzIGFk
ZHMgYSBuZXcgTGF6eU5vZGUgY2xhc3MgaW4gREZHIHRoYXQgcmVwcmVzZW50cyBlaXRoZXIgYSBO
b2RlKiwKKyAgICAgICAgb3IgYSBGcm96ZW5WYWx1ZSogd2l0aCBhIHdheSB0byBjb252ZXJ0IGl0
IHRvIGEgTm9kZSogcHJvdmlkZWQgYSBibG9jaworICAgICAgICB0byBpbnNlcnQgaXQgaW50by4g
REZHQ2xvYmJlcml6ZSBpcyBjb252ZXJ0ZWQgdG8gdXNlIExhenlOb2RlIGluc3RlYWQKKyAgICAg
ICAgb2YgTm9kZSogd2hlbiBkZWYoKSdpbmcgdmFsdWVzLCB3aGljaCBhbGxvd3MgdG8gbm93IGRl
ZmluZSB0aGUgYXJyYXkncworICAgICAgICBsZW5ndGggYXMgd2VsbCBhcyB0aGUgdmFsdWUgb2Yg
aXRzIHZhcmlvdXMgZmllbGRzIGluIE5ld0FycmF5IGFuZAorICAgICAgICBOZXdBcnJheUJ1ZmZl
ciBub2Rlcy4KKworICAgICAgICBXZSBhbHNvIGludHJvZHVjZSBhIFZlY3Rvcjx1aW50MzJfdD4g
aW4gREZHOjpHcmFwaCB0byBjb2xsZWN0IGFsbCB0aGUKKyAgICAgICAgdmFsdWVzIHRoYXQgY2Fu
IGJlIHVzZWQgYXMgaW5kZXgsIGluIG9yZGVyIHRvIGF2b2lkIGRlZigpJ2luZyB0b28gbWFueQor
ICAgICAgICB2YWx1ZXMgYXQgb25jZSBmb3IgYmlnIE5ld0FycmF5QnVmZmVycy4KKworICAgICAg
ICBIZWFwTG9jYXRpb24gaGFkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlIGEgTGF6eU5vZGUgYXMgaXRz
IGluZGV4IHRvIGJlCisgICAgICAgIGFibGUgdG8gZGVmaW5lIGFycmF5IHZhbHVlcy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmcmVlemVGcmFn
aWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExv
Y2F0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpIZWFwTG9jYXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OkhlYXBMb2NhdGlvbjo6aGFzaCk6CisgICAgICAgICogZGZnL0RGR0xhenlOb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmR1bXApOgorICAgICAgICAq
IGRmZy9ERkdMYXp5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6
TGF6eU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpzZXROb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlOb2RlOjppc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlO
b2RlOjpvcCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmFzTm9kZSk6CisgICAgICAg
IChKU0M6OkRGRzo6TGF6eU5vZGU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlO
b2RlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkxhenlOb2RlOjplbnN1cmVJc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2Rl
OjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3IqKToK
KyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6
REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOgorICAgICAgICAo
SlNDOjpERkc6OkxhenlOb2RlOjpzZXRGcm96ZW5WYWx1ZSk6CisgICAgICAgICogZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxD
bG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuY3BwOgorCiAyMDE1LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgQmV0dGVyIG9wdGltaXplICdpZicgd2l0aCB0ZXJuYXJpZXMgY29uZGl0aW9u
YWwgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2U2MjJhMDc4
MjBmYzhlNWZmMGFkYzA3YzA1NmFmZjZjNzVkZjI4Mi4uMjAzZjU0MGU4NGY1ODNlN2JmOWNlYTAy
MTk1ODIzNjRmOWQ1Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTg3LDYgKzE4Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0p1
bXBSZXBsYWNlbWVudC5jcHAKICAgICBkZmcvREZHTElDTVBoYXNlLmNwcAogICAgIGRmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAKKyAgICBkZmcvREZHTGF6eU5vZGUuY3BwCiAgICAgZGZnL0RGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCiAgICAg
ZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKaW5kZXggY2ZhOGQzODY4OTU3OGNjMzE1ODhhZGE5NjI5N2IxNjhm
NWIyYjc5MC4uMzZjYzczNzA0YTU4Mjc5ZmZjYjcxOGNiOTQ5OGIzNzljZDJiOWE2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC00MjMsNiArNDIzLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5hbGl6ZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuY3BwIiAvPgpAQCAt
MTExNSw2ICsxMTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRG
aW5hbGl6ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKdW1wUmVw
bGFjZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMYXp5SlNW
YWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTElDTVBoYXNlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuaCIg
Lz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpp
bmRleCA4ODU5NTEyNDk0MTU1NjJhOWI0MWZkZDlkMDRmOGEyMzA1OTI2NTIzLi45M2ZlNWUyNjkw
Mzc1NmI5NWE3OThmYTE3NTViM2QyMzRjMjNjMDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xMTkxLDYgKzExOTEsOSBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1ZhbHVlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xJ
Q01QaGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KQEAgLTM1NjIsNiArMzU2NSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHTGF6eUpTVmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmgiPgor
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhYzlkMjU4MmRmNjBlNTdjNTZmMDAwYmUwODFiYzdhYmQ3MWI0MGE1Li5lNDg4MzNjNWM5ODFm
MTA0N2ZmMDdkZTY2NTI4NDk2MmNhMTU5MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtOTYwLDYgKzk2MCw4IEBACiAJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVh
dGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk2MkQyRDM4RjFBREYxMDNGMDAwMjA2
QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJl
RGF0YS5jcHAgKi87IH07CiAJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJh
cmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTYyRjJBQTM3MUIwQkVERTMw
MDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUu
Y3BwICovOyB9OworCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyQTlBMjlGMUIw
QkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3RDg5NiAvKiBKU1R5
cGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MTEyMkZEMTQwNDZBNEMwMDJCMTAx
RCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk2NTExMjJGRTE0MDQ2QTRDMDAyQjEwMUQgLyog
bGliZWRpdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliICovOyB9OwpA
QCAtMjY3Myw2ICsyNjc1LDggQEAKIAkJNURBRkQ2Q0IxNDZCNjg2MzAwRkJFRkI0IC8qIEpTQy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBKU0MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVERERGNDQ2MTRGRUU3MjIwMEI0RkI0RCAvKiBMTEludERlc2lyZWRPZmZzZXRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50RGVzaXJlZE9mZnNldHMu
aDsgcGF0aCA9IExMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZzZXRzLmg7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVERTNEMEY0MEREOERERkIwMDQ2ODcxNCAvKiBX
ZWJLaXRBdmFpbGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
S2l0QXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyQTlBMjlF
MUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5Tm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0
Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
TGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvblJhcmVEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEUxQURGMTAzRjAwMDIw
NkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRnVuY3Rpb25SYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTA3
RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1R5cGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00OTg5LDYgKzQ5OTMsOCBAQAogCQkJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdK
dW1wUmVwbGFjZW1lbnQuaCAqLywKIAkJCQlBNzNBNTM1ODE3OTlDRDVEMDAxNzBDMTkgLyogREZH
TGF6eUpTVmFsdWUuY3BwICovLAogCQkJCUE3M0E1MzU5MTc5OUNENUQwMDE3MEMxOSAvKiBERkdM
YXp5SlNWYWx1ZS5oICovLAorCQkJCTYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5
Tm9kZS5jcHAgKi8sCisJCQkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2Rl
LmggKi8sCiAJCQkJQTdEOUEyOTIxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5jcHAg
Ki8sCiAJCQkJQTdEOUEyOTMxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oICovLAog
CQkJCUE3RDg5Q0VDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwICovLApAQCAtNTg2Nyw2ICs1ODczLDcgQEAKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNB
RDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAv
KiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMw
MDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMx
NkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJz
ICovLApAQCAtNzI0Nyw2ICs3MjU0LDcgQEAKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5
REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y0
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCmluZGV4IDE0MTM4NDMyMjIyMjc5Y2E4N2M0ZmViY2JjNmZhNWNhYzA1YjE4ODQu
LmU4NzA1ODkwYjI0NTRiZGM3OTA4NjQ2ODFiZTc0MWE2MjUzNmQzMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgICAg
ICBMYXp5Tm9kZSBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQogICAgICAg
ICB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ltcHVyZUxlbmd0aDsgaS0tOykg
ewogICAgICAgICAgICAgICAgIGlmIChtX2ltcHVyZU1hcFtpXS5rZXkgPT0gbG9jYXRpb24pCkBA
IC0xNTcsMTggKzE1NywyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgTm9kZSogYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICAgICAgTGF6eU5vZGUgYWRkSW1wdXJlKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KE5vZGUqIHJlc3VsdCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbikpCisgICAgICAgICAgICAv
LyBGSVhNRTogSWYgd2UgYXJlIHVzaW5nIHNtYWxsIG1hcHMsIHdlIG11c3Qgbm90IGRlZigpIGRl
cml2ZWQgdmFsdWVzLgorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGUgb25seSBkZXJpdmVkIHZh
bHVlcyB3ZSBkZWYoKSBhcmUgY29uc3RhbnQtYmFzZWQuCisgICAgICAgICAgICBpZiAobG9jYXRp
b24uaW5kZXgoKSAmJiAhbG9jYXRpb24uaW5kZXgoKS5pc05vZGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChMYXp5Tm9kZSByZXN1bHQgPSBmaW5k
UmVwbGFjZW1lbnQobG9jYXRpb24pKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICBBU1NFUlQobV9pbXB1cmVMZW5ndGggPCBjYXBhY2l0eSk7Ci0gICAgICAgICAg
ICBtX2ltcHVyZU1hcFttX2ltcHVyZUxlbmd0aCsrXSA9IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBM
b2NhdGlvbiwgTm9kZSo+KGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgICAgIG1faW1wdXJlTWFw
W21faW1wdXJlTGVuZ3RoKytdID0gV1RGOjpLZXlWYWx1ZVBhaXI8SGVhcExvY2F0aW9uLCBMYXp5
Tm9kZT4obG9jYXRpb24sIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0KICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxQdXJl
VmFsdWUsIE5vZGUqPiBtX3B1cmVNYXBbY2FwYWNpdHldOwotICAgICAgICBXVEY6OktleVZhbHVl
UGFpcjxIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2ltcHVyZU1hcFtjYXBhY2l0eV07CisgICAgICAg
IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1faW1wdXJlTWFwW2Nh
cGFjaXR5XTsKICAgICAgICAgdW5zaWduZWQgbV9wdXJlTGVuZ3RoOwogICAgICAgICB1bnNpZ25l
ZCBtX2ltcHVyZUxlbmd0aDsKICAgICB9OwpAQCAtMTk4LDEyICsyMDIsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0
aW9uKQorICAgICAgICBMYXp5Tm9kZSBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0
aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbXB1cmVNYXAuZ2V0KGxvY2F0
aW9uKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBOb2RlKiBhZGRJbXB1cmUoSGVhcExvY2F0
aW9uIGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgICAgICBMYXp5Tm9kZSBhZGRJbXB1cmUoSGVh
cExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1faW1wdXJlTWFwLmFkZChsb2NhdGlvbiwgbm9kZSk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCkBAIC0yMTMsNyArMjE3LDcgQEAgcHJpdmF0ZToK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJl
TWFwOwotICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwOwor
ICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1faW1wdXJlTWFwOwogICAg
IH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBzPgpAQCAtMjIxLDYgKzIyNSw3IEBAIHBy
aXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICBCbG9ja0NTRShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdy
YXBoKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAKQEAgLTIyOCw2ICsyMzMsNyBAQCBwcml2
YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBtX21hcHMuY2xlYXIoKTsKICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBtX25vZGUgPSBi
bG9jay0+YXQobm9kZUluZGV4KTsKQEAgLTI5Nyw2ICszMDMsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
ZXhlY3V0ZShibG9jayk7CiAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsK
ICAgICAgICAgfQpAQCAtMzE4LDkgKzMyNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgCi0gICAgICAgIHZvaWQgZGVmKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCisgICAgICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTGF6eU5vZGUgdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUq
IG1hdGNoID0gbV9tYXBzLmFkZEltcHVyZShsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICAgICAg
TGF6eU5vZGUgbWF0Y2ggPSBtX21hcHMuYWRkSW1wdXJlKGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBA
IC0zNDMsOCArMzUxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRo
cmVhZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIG1fbm9kZS0+cmVw
bGFjZVdpdGgobWF0Y2gpOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc05vZGUoKSAmJiB2YWx1ZS5hc05vZGUoKSA9PSBtX25vZGUpIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaC5lbnN1cmVJc05vZGUobV9pbnNlcnRpb25TZXQsIG1fYmxvY2ss
IDApLT5vd25lciA9IG1fYmxvY2s7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoLmlzTm9k
ZSgpKTsKKyAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKG1hdGNoLmFzTm9kZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTM1Miw4ICszNjQsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgICAgICBOb2RlKiBtX25vZGU7
CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgCiAgICAgICAgIE1hcHMgbV9tYXBz
OworCisgICAgICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICB9OwogCiAgICAg
QmxvY2tDU0U8U21hbGxNYXBzPiBtX3NtYWxsQmxvY2s7CkBAIC0zNjUsNiArMzgwLDcgQEAgcHVi
bGljOgogICAgIEdsb2JhbENTRVBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgImdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgICAg
ICwgbV9pbXB1cmVEYXRhTWFwKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBo
KQogICAgIHsKICAgICB9CiAgICAgCkBAIC00MjksNiArNDQ1LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4iKTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBt
X2Jsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlSW5k
ZXggPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgbV9ub2RlID0gbV9ibG9jay0+YXQobm9k
ZUluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICBMb29raW5nIGF0IG5vZGUgIiwgbV9ub2RlLCAiOlxuIik7CkBAIC00NDEs
NiArNDU4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtNDg2LDEzICs1MDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChtX25vZGUpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBmaW5kUmVw
bGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIExhenlOb2RlIGZpbmRSZXBsYWNl
bWVudChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewogICAgICAgICAvLyBBdCB0aGlzIGlu
c3RhbnQsIG91ciAiYXZhaWxhYmxlQXRUYWlsIiByZWZsZWN0cyB0aGUgc2V0IG9mIHRoaW5ncyB0
aGF0IGFyZSBhdmFpbGFibGUgaW4KICAgICAgICAgLy8gdGhpcyBibG9jayBzbyBmYXIuIFdlIGNo
ZWNrIHRoaXMgbWFwIHRvIGZpbmQgYmxvY2stbG9jYWwgQ1NFIG9wcG9ydHVuaXRpZXMgYmVmb3Jl
IGRvaW5nCiAgICAgICAgIC8vIGEgZ2xvYmFsIHNlYXJjaC4KLSAgICAgICAgTm9kZSogbWF0Y2gg
PSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwotICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgTGF6eU5vZGUgbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWls
YWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOworICAgICAgICBpZiAoISFtYXRjaCkgewogICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgRm91bmQg
bG9jYWwgbWF0Y2g6ICIsIG1hdGNoLCAiXG4iKTsKICAgICAgICAgICAgIHJldHVybiBtYXRjaDsK
QEAgLTU3NSw3ICs1OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRh
LmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eTog
IiwgbWF0Y2gsICJcbiIpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAg
ICAgICAgIGlmICghIW1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGV4YW1p
bmUgdGhlIHByZWRlY2Vzc29ycyBvZiBhIG1hdGNoLiBBdCB0aGlzIHBvaW50IHdlIGp1c3Qgd2Fu
dCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2ggdGhhdCBvdGhlciBibG9ja3Mg
b24gdGhlIHBhdGggZnJvbSBoZXJlIHRvIHRoZXJlIGRvbid0IGNsb2JiZXIKICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIGxvY2F0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uCkBAIC02MTYsMTIg
KzYzNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICB2b2lk
IGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRp
b24gZGVmOiAiLCBsb2NhdGlvbiwgIiAtPiAiLCB2YWx1ZSwgIlxuIik7CiAgICAgICAgIAotICAg
ICAgICBOb2RlKiBtYXRjaCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbik7CisgICAgICAgIExh
enlOb2RlIG1hdGNoID0gZmluZFJlcGxhY2VtZW50KGxvY2F0aW9uKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAi
LCBtYXRjaCwgIlxuIik7CkBAIC02MzMsOSArNjUyLDMzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgo
bWF0Y2gpOwotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh2YWx1ZS5p
c05vZGUoKSAmJiB2YWx1ZS5hc05vZGUoKSA9PSBtX25vZGUpIHsKKyAgICAgICAgICAgIGlmICgh
bWF0Y2guaXNOb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHByb3Blcmx5
IHJlY29yZCB0aGUgY29uc3RhbnQgaW4gb3JkZXIgdG8gdXNlIGFuIGV4aXN0aW5nIG9uZSBpZiBh
cHBsaWNhYmxlLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHJlLXJ1bm5p
bmcgR0NTRSB3aWxsIG5vdCBmaW5kIG5ldyBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAg
IG1hdGNoLmVuc3VyZUlzTm9kZShtX2luc2VydGlvblNldCwgbV9ibG9jaywgbV9ub2RlSW5kZXgp
LT5vd25lciA9IG1fYmxvY2s7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3B1cmVW
YWx1ZXMuYWRkKFB1cmVWYWx1ZShtYXRjaC5hc05vZGUoKSwgbWF0Y2gtPmNvbnN0YW50KCkpLCBW
ZWN0b3I8Tm9kZSo+KCkpOworICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9kb21pbmF0b3JzLmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoLnNldE5vZGUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlZCkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWF0Y2gu
YXNOb2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKG1hdGNoLmFzTm9k
ZSgpKTsKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2guYXNOb2RlKCkpOwor
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKQEAgLTY1Niw4ICs2OTksMTAgQEAgcHVibGljOgog
ICAgIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9ub2RlOworICAgIHVu
c2lnbmVkIG1fbm9kZUluZGV4OwogICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRhOwog
ICAgIENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CiAgICAgCiAgICAgYm9vbCBtX2NoYW5nZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA1MjNkNzIzYjU3MGFjNTAwNmRlOGNhMDFkY2Ex
Y2EwZjRkNGUzMzg2Li45MTk3ZTQ1MjMzZDViNWQ2MGUxZGQ5OTI5ZmU4ZTI1ODBkNjM3NzdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3Jh
cGguaCIKICNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdMYXp5Tm9k
ZS5oIgogI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CkBAIC0xOTUsNyArMTk2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50
MzJQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4
ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKEhlYXApOwpAQCAtMjA2LDcg
KzIwNyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwotICAg
ICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRl
eGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlM
b2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmVhZChIZWFwKTsKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CiAg
ICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgICAg
ICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3Vz
UHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAg
ICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwg
TGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJlYWQoSGVhcCk7CkBAIC0zMDMsNyArMzA0LDcgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICAgICAgCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRp
b25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9pbnRfZmlyZSksIExhenlOb2RlKG5v
ZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKQEAgLTM1NCwxNyArMzU1
LDE3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAKICAgICBjYXNlIFZhckluamVjdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgIGRlZihIZWFwTG9j
YXRpb24oVmFySW5qZWN0aW9uV2F0Y2hwb2ludExvYywgTWlzY0ZpZWxkcyksIG5vZGUpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsIE1pc2NGaWVs
ZHMpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgSXNPYmpl
Y3RPck51bGw6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgIGRlZihIZWFwTG9j
YXRpb24oSXNPYmplY3RPck51bGxMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9k
ZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RPck51bGxMb2MsIE1pc2NGaWVs
ZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgSXNGdW5jdGlvbjoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2Rl
LT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25M
b2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlJZDoKQEAgLTM5MSw0NSArMzkyLDQ1
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVy
OgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOwotICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBu
b2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJMb2MsIEdldHRlclNldHRlcl9n
ZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRl
cl9zZXR0ZXIpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNldHRlckxvYywgR2V0dGVyU2V0
dGVyX3NldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2Fs
bGVlOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6Q2FsbGVlKSk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywg
SlNTdGFjazo6Q2FsbGVlKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNr
TG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpLCBMYXp5Tm9kZShub2Rl
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJzdHJhY3RI
ZWFwKFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG5vZGUpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNr
OjpBcmd1bWVudENvdW50KSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgp
KSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkp
KSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChT
dGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKICAgICAgICAgcmVhZChoZWFw
KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIG5vZGUpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7CiAg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihT
dGFja0xvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC00NTYsNyArNDU3LDcgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwo
KSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRCeVZhbDogewpAQCAtNDkxLDE5ICs0OTIsMTkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnUKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAg
ICAgICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMpOwotICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3Bl
cnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1By
b3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKFNjb3BlUHJvcGVydGllcyk7Ci0g
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBTY29wZVByb3BlcnRpZXMs
IG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4
ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTUxNCw3ICs1
MTUsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJ
bkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKLSAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOwor
ICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRl
eGVkRG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNTI1LDcgKzUyNiw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAg
ICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJl
YWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVz
LCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQ
cm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2Rl
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmVhZChXb3JsZCk7CkBAIC01NTQsNyArNTU1LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAgICAgICAgcmVhZChUeXBl
ZEFycmF5UHJvcGVydGllcyk7CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFR5cGVkQXJyYXlQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVy
dGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC02MDUsNyArNjA2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAg
d3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5k
ZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0
eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCBMYXp5Tm9kZSh2YWx1
ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKQEAgLTYyMCw3ICs2MjEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQog
ICAgICAgICAgICAgd3JpdGUoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAg
d3JpdGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGJhc2UsIGlu
ZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVy
dHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIExhenlOb2RlKHZh
bHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czoKQEAgLTYzNSw3ICs2MzYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKICAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAg
ICAgICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVy
dGllcywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBiYXNlLCBp
bmRleCksIExhenlOb2RlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNjgxLDEyICs2ODIsMTIg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7Ci0gICAgICAgIGRlZihIZWFwTG9j
YXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNo
aWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0YW5j
ZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9k
ZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIHJl
YWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0YW5j
ZU9mTG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluc3RhbmNlT2ZMb2MsIEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUo
bm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTY5
OCwxOCArNjk5LDE4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIAogICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRl
cmZseSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9i
dXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5v
ZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0
dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVj
dF9idXR0ZXJmbHkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNP
YmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEo
KSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEFycmF5aWZ5OgpAQCAtNzI5LDEyICs3MzAsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZWFkKE1pc2NGaWVsZHMp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsIE1p
c2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oSW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFy
cmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShu
b2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoK
QEAgLTc0Miw3ICs3NDMsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlm
aWVyTnVtYmVyOwogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlk
ZW50aWZpZXJOdW1iZXIpOwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hp
bGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IApAQCAtNzUxLDcgKzc1Miw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
YWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQ
cm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIp
OwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJv
cGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9k
ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNzY0LDcgKzc2
NSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShKU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5y
ZWFsbG9jYXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZs
eSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9k
ZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IApAQCAtNzcyLDcgKzc3Myw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50
aWZpZXJOdW1iZXI7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywg
aWRlbnRpZmllck51bWJlcik7CiAgICAgICAgIHdyaXRlKGhlYXApOwotICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigpKSwgbm9kZS0+
Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5
TG9jLCBoZWFwLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMygpLm5vZGUo
KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTc4NSw3ICs3ODYsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2Ms
IEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKQEAgLTc5NSw2MyArNzk2LDE1MCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQog
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5j
aGlsZDEoKSksIG5vZGUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0
aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJheSk7CiAgICAg
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihB
cnJheUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUt
PmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZz
ZXQoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSks
IG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3Vy
ZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9m
ZnNldCgpLm9mZnNldCgpKSwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNldCgpLm9m
ZnNldCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBB
YnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgp
KSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVy
dGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5vZGUtPmNoaWxkMSgpKSwgTGF6
eU5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFw
KERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0
KCkub2Zmc2V0KCkpOwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czogewog
ICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2Rl
LT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKICAgICAgICAgd3JpdGUoaGVh
cCk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oRGlyZWN0QXJndW1lbnRzTG9jLCBoZWFwKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihEaXJlY3RB
cmd1bWVudHNMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT52YXJpYWJsZVBvaW50ZXIo
KSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFj
dEhlYXAoQWJzb2x1dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIG5vZGUpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1
dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpOwotICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1
dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChB
YnNvbHV0ZSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3QXJyYXk6CiAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgY2Fz
ZSBOZXdUeXBlZEFycmF5OgotICAgICAgICAvLyBGSVhNRTogRW5hYmxlIENTRSBmb3IgdGhlc2Ug
bm9kZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5
Ci0gICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBub2RlIGFuZCBhIHZhbHVlIG5v
ZGUuIFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2VyZWQKLSAgICAgICAgLy8gdGhl
c2Ugbm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3YXkgb2YgZGVmKCknaW5nLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3
CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVj
dENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBOZXdBcnJheTogeworICAgICAg
ICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7
CisKKyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBub2RlLT5udW1DaGlsZHJlbigpOwor
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgsIG5vZGUpLAorICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVt
YmVyKG51bUVsZW1lbnRzKSkpKTsKKworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwOworICAgICAgICBzd2l0
Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgIGhlYXAgPSBJbmRleGVkRG91YmxlUHJvcGVydGllczsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRJbnQzMlByb3BlcnRpZXM7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobnVtRWxlbWVudHMgPCBncmFwaC5tX3VpbnQzMlZhbHVl
c0luVXNlLnNpemUoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0g
MDsgb3BlcmFuZElkeCA8IG51bUVsZW1lbnRzOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAg
ICAgICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihv
cGVyYW5kSWR4KSkpKSwKKyAgICAgICAgICAgICAgICAgICAgTGF6eU5vZGUodXNlLm5vZGUoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1aW50
MzJfdCBvcGVyYW5kSWR4IDogZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZSkgeworICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kSWR4ID49IG51bUVsZW1lbnRzKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2Rl
KGdyYXBoLmZyZWV6ZShqc051bWJlcihvcGVyYW5kSWR4KSkpKSwKKyAgICAgICAgICAgICAgICAg
ICAgTGF6eU5vZGUodXNlLm5vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOiB7CisgICAgICAg
IHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsK
KworICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNvbnN0YW50cygpOwor
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoLCBub2RlKSwKKyAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJl
cihudW1FbGVtZW50cykpKSk7CisKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXA7CisgICAgICAg
IE5vZGVUeXBlIG9wID0gSlNDb25zdGFudDsKKyAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgICAgICBoZWFwID0gSW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CisgICAgICAgICAgICBvcCA9
IERvdWJsZUNvbnN0YW50OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZEludDMyUHJv
cGVydGllczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZENvbnRpZ3VvdXNQ
cm9wZXJ0aWVzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBncmFw
aC5tX2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS0+c3RhcnRDb25zdGFudCgpKTsKKyAg
ICAgICAgaWYgKG51bUVsZW1lbnRzIDwgZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZS5zaXplKCkp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUVsZW1l
bnRzOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihp
bmRleCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShkYXRh
W2luZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IGluZGV4IDogZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZSkgewor
ICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVk
UHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihp
bmRleCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShkYXRh
W2luZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAg
IGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpAQCAtMTAzOSw3ICsxMTI3LDcgQEAgcHVibGljOgogICAg
ICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3Io
KShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpIGNvbnN0CisgICAgdm9pZCBvcGVy
YXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkgY29uc3QKICAgICB7
CiAgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDk1NGMyMjhmYmEzMzNhODFlZDQzNGM2NmIz
ZTNhOGFiNjBkMzQ0OWUuLjA4YTc4YzE1MmE5NWE2YTY2N2Y1NjVjMGM0YTE4MzhmZGU4OGQwYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMjEwLDYgKzEyMTAs
OSBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZUZyYWdpbGUoSlNWYWx1ZSB2YWx1ZSkKICAg
ICBhdXRvIHJlc3VsdCA9IG1fZnJvemVuVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSksIG51bGxwdHIpOwogICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc05ld0VudHJ5KSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBpZiAoVU5MSUtFTFkodmFs
dWUuaXNVSW50MzIoKSkpCisgICAgICAgIG1fdWludDMyVmFsdWVzSW5Vc2UuYXBwZW5kKHZhbHVl
LmFzVUludDMyKCkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
bV9mcm96ZW5WYWx1ZXMuYWRkKEZyb3plblZhbHVlOjpmcmVlemUodmFsdWUpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCA2NWE2M2UwYjNkNDRkZGYxY2YzMmVkYmUy
NzM0MDU1NjVjODEzNGM0Li5iYWM1MzhmMDI1ZDNlY2UxMzdiZTMxNzgwNjg4MTVkOTUzN2M5NWE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04MDYsNiArODA2LDggQEAg
cHVibGljOgogCiAgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgRnJvemVuVmFsdWUqLCBFbmNv
ZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cz4gbV9mcm96ZW5WYWx1ZU1h
cDsKICAgICBCYWc8RnJvemVuVmFsdWU+IG1fZnJvemVuVmFsdWVzOworCisgICAgVmVjdG9yPHVp
bnQzMl90PiBtX3VpbnQzMlZhbHVlc0luVXNlOwogICAgIAogICAgIEJhZzxTdG9yYWdlQWNjZXNz
RGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCmluZGV4IGNlMjdlZjRiZjcxOWI3Y2QwZDlhMDRiNmVjYTE5
ODU2MzZlYzEyMjMuLjNkM2E5NGNjZjEzODYxODI3ZWMyOGM5MTU3ZDU2YTIyMTRmNmFhOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaApAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFw
LmgiCisjaW5jbHVkZSAiREZHTGF6eU5vZGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIEhlYXBMb2NhdGlvbigKICAgICAgICAgTG9jYXRpb25LaW5kIGtpbmQgPSBJbnZhbGlkTG9j
YXRpb25LaW5kLAogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcCA9IEFic3RyYWN0SGVhcCgpLAot
ICAgICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTm9kZSogaW5kZXggPSBudWxscHRyKQorICAg
ICAgICBOb2RlKiBiYXNlID0gbnVsbHB0ciwgTGF6eU5vZGUgaW5kZXggPSBMYXp5Tm9kZSgpKQog
ICAgICAgICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1faGVhcChoZWFwKQogICAgICAgICAs
IG1fYmFzZShiYXNlKQpAQCAtNzQsNiArNzUsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
ISFtX2hlYXAgfHwgIW1fYmFzZSk7CiAgICAgICAgIEFTU0VSVChtX2Jhc2UgfHwgIW1faW5kZXgp
OwogICAgIH0KKworICAgIEhlYXBMb2NhdGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RI
ZWFwIGhlYXAsIE5vZGUqIGJhc2UsIE5vZGUqIGluZGV4KQorICAgICAgICA6IEhlYXBMb2NhdGlv
bihraW5kLCBoZWFwLCBiYXNlLCBMYXp5Tm9kZShpbmRleCkpCisgICAgeworICAgIH0KICAgICAK
ICAgICBIZWFwTG9jYXRpb24oTG9jYXRpb25LaW5kIGtpbmQsIEFic3RyYWN0SGVhcCBoZWFwLCBF
ZGdlIGJhc2UsIEVkZ2UgaW5kZXggPSBFZGdlKCkpCiAgICAgICAgIDogSGVhcExvY2F0aW9uKGtp
bmQsIGhlYXAsIGJhc2Uubm9kZSgpLCBpbmRleC5ub2RlKCkpCkBAIC05MywxMSArOTksMTEgQEAg
cHVibGljOgogICAgIExvY2F0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CiAgICAgQWJzdHJhY3RIZWFwIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KICAgICBO
b2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgTm9kZSogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTGF6eU5vZGUgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9raW5kICsgbV9oZWFwLmhhc2goKSArIFdURjo6UHRySGFzaDxOb2Rl
Kj46Omhhc2gobV9pbmRleCkgKyBtX2tpbmQ7CisgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX2hl
YXAuaGFzaCgpICsgbV9pbmRleC5oYXNoKCkgKyBtX2tpbmQ7CiAgICAgfQogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBIZWFwTG9jYXRpb24mIG90aGVyKSBjb25zdApAQCAtMTE5LDcg
KzEyNSw3IEBAIHByaXZhdGU6CiAgICAgTG9jYXRpb25LaW5kIG1fa2luZDsKICAgICBBYnN0cmFj
dEhlYXAgbV9oZWFwOwogICAgIE5vZGUqIG1fYmFzZTsKLSAgICBOb2RlKiBtX2luZGV4OworICAg
IExhenlOb2RlIG1faW5kZXg7CiB9OwogCiBzdHJ1Y3QgSGVhcExvY2F0aW9uSGFzaCB7CkBAIC0x
NDgsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6SGVh
cExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0MKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBOb2RlKj4g
SW1wdXJlTWFwOwordHlwZWRlZiBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IEltcHVy
ZU1hcDsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1NGVkOTg1NWQ1ZWUyYTUzNjJhOWMx
N2I3YTU3MzE0YjJhMjU0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlOb2RlLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0xhenlOb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIExhenlOb2RlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCJMYXp5Tm9k
ZTowIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc05vZGUoKSkKKyAgICAgICAgICAgIG91
dC5wcmludCgiTGF6eU5vZGU6QCIsIGFzTm9kZSgpLT5pbmRleCgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KCJMYXp5Tm9kZTpGcm96ZW5WYWx1ZToiLCBHcmFwaDo6b3BO
YW1lKG9wKCkpLCAiLCAiLCBwb2ludGVyRHVtcChhc1ZhbHVlKCkpKTsKKyAgICAgICAgb3V0LnBy
aW50KCIpIik7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGF6eU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMjU3MWY3YWJhY2IwZmVlOWYyNjdiM2RmNmViMDZmY2U5N2M2OTViCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5o
CkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBERkdMYXp5Tm9kZV9oCisjZGVmaW5lIERGR0xhenlOb2RlX2gKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAi
REZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworCisKK2NsYXNzIExhenlOb2RlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGpzQ29uc3RhbnRUYWcgPSAwOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgZG91YmxlQ29uc3RhbnRUYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgaW50NTJDb25zdGFudFRhZyA9IDI7CisKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IHRhZ01hc2sgPSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBwb2ludGVyTWFzayA9
IH50YWdNYXNrOworCisgICAgZXhwbGljaXQgTGF6eU5vZGUoTm9kZSogbm9kZSA9IG51bGxwdHIp
CisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV92YWx1ZShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obnVsbHB0cikpCisgICAgeworICAgICAgICBpZiAobm9kZSAmJiBub2Rl
LT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBzZXRGcm96ZW5WYWx1ZShub2RlLT5jb25zdGFu
dCgpLCBub2RlLT5vcCgpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBMYXp5Tm9kZShGcm96ZW5W
YWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKKyAgICAgICAgOiBtX25vZGUo
bnVsbHB0cikKKyAgICAgICAgLCBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihu
dWxscHRyKSkKKyAgICB7CisgICAgICAgIHNldEZyb3plblZhbHVlKHZhbHVlLCBvcCk7CisgICAg
fQorCisgICAgTGF6eU5vZGUoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogbV9ub2RlKG51bGxw
dHIpCisgICAgICAgICwgbV92YWx1ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obnVsbHB0
cikpCisgICAgeworICAgIH0KKworICAgIExhenlOb2RlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX25vZGUocmVpbnRlcnByZXRfY2FzdDxOb2RlKj4oLTEpKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIG1fbm9kZSA9IG5vZGU7CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgIHNldEZyb3plblZhbHVlKG5vZGUtPmNvbnN0YW50KCksIG5vZGUtPm9w
KCkpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX25vZGUgPT0gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4oLTEpOyB9CisKKyAgICBi
b29sIGlzTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorCisgICAgTm9kZVR5cGUgb3Ao
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBt
X25vZGUtPm9wKCk7CisKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlICYgdGFnTWFzaykgeworICAg
ICAgICBjYXNlIGpzQ29uc3RhbnRUYWc6CisgICAgICAgICAgICByZXR1cm4gSlNDb25zdGFudDsK
KyAgICAgICAgY2FzZSBkb3VibGVDb25zdGFudFRhZzoKKyAgICAgICAgICAgIHJldHVybiBEb3Vi
bGVDb25zdGFudDsKKyAgICAgICAgY2FzZSBpbnQ1MkNvbnN0YW50VGFnOgorICAgICAgICAgICAg
cmV0dXJuIEludDUyQ29uc3RhbnQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSog
YXNOb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX25vZGUgfHwgIWFzVmFsdWUo
KSk7CisgICAgICAgIHJldHVybiBtX25vZGU7CisgICAgfQorCisgICAgRnJvemVuVmFsdWUqIGFz
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RnJv
emVuVmFsdWUqPihtX3ZhbHVlICYgcG9pbnRlck1hc2spOworICAgIH0KKworICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6OlB0ckhhc2g8RnJvemVuVmFsdWUqPjo6aGFzaChhc1ZhbHVlKCkpOworICAg
ICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX25vZGUpOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXp5Tm9kZSYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5tX25vZGU7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExhenlOb2RlJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBOb2Rl
KiBlbnN1cmVJc05vZGUoSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIEJhc2ljQmxvY2sqIGJs
b2NrLCB1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIW1fbm9kZSkKKyAg
ICAgICAgICAgIG1fbm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudChub2RlSW5kZXgs
IGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4sIGFzVmFsdWUoKSwgb3AoKSk7CisKKyAgICAg
ICAgcmV0dXJuIGFzTm9kZSgpOworICAgIH0KKworICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBhc05vZGUoKTsgfQorCisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKmFzTm9kZSgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFhc1ZhbHVlKCkgJiYgIWFzTm9kZSgpOyB9CisKKyAgICB0eXBlZGVmIHZvaWQqIChMYXp5Tm9k
ZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworCisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29s
VHlwZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXMgPyByZWludGVycHJl
dF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0RnJv
emVuVmFsdWUoRnJvemVuVmFsdWUqIHZhbHVlLCBOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odmFsdWUpOworICAgICAgICBBU1NFUlQobV92YWx1ZSA9PSAobV92YWx1ZSAmIHBvaW50
ZXJNYXNrKSk7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50
OgorICAgICAgICAgICAgbV92YWx1ZSB8PSBqc0NvbnN0YW50VGFnOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICBtX3ZhbHVlIHw9
IGRvdWJsZUNvbnN0YW50VGFnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKKyAgICAgICAgICAgIG1fdmFsdWUgfD0gaW50NTJDb25zdGFudFRhZzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgTm9kZSogbV9ub2RlOworICAgIHVpbnRwdHJfdCBtX3ZhbHVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6REZHOjpMYXp5Tm9kZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6Okxh
enlOb2RlPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHTGF6eU5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCA1NGJmYjUyZTZjMmMyMWM0
ZWRhMDBmNTk5NzU5MDRmNzcxM2IxMDg1Li4xY2Q2YjA5ZWZmMmQyYWU0NWExNGI1YzA3MDBkYzVi
ZjZhMTFkOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIFB1cmVWYWx1ZSBkZWZzIG5ldmVyIGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBsb2NhbHMs
IHNvIGlnbm9yZSB0aGlzLgogICAgIH0KICAgICAKLSAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24g
bG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9u
LCBMYXp5Tm9kZSBub2RlKQogICAgIHsKICAgICAgICAgaWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBT
dGFja0xvYykKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKaW5kZXggYjg5NzQ0MGRhOWRj
NTlmNjNhMTcyOTQ5NTkyMDMzZWU3YmRlOGRlMS4uYmU1YmQ4ZjNhOWExNjRiYjY5NTExNmNhNTRk
MzliZDJkODNlODNkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKQEAgLTEwOSw4ICsxMDksMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhh
bmRsZXIsIGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIExhenlOb2RlIHNvdXJjZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZS5pc05vZGUoKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmFzTm9kZSgpID09IG5vZGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9y
ZSBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzMSw4ICsyMzMsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIs
IGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIExhenlOb2RlIHNvdXJjZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZS5pc05vZGUoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmFzTm9kZSgpID09IG5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTQzNiw3ICs0NDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5k
bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIE5vZGUq
KSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExh
enlOb2RlKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9IH0KICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253593</attachid>
            <date>2015-05-22 09:35:04 -0700</date>
            <delta_ts>2015-05-22 10:24:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-145272-20150522093458.patch</filename>
            <type>text/plain</type>
            <size>57330</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjRjMmE4ZmEyZjc3NDIyZTI4Njg3ZWNlODJhZTg3NGYxNGRhZWZmLi4xYjIxOTAxMDJmMTM2Mjhk
NmUwZTIzYmZlMGQ0NzAxOTQ4ODE1ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNS0wNS0yMiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgREZHQ2xvYmJlcml6ZSB0byByZXR1cm4gbm9uLW5v
ZGUgY29uc3RhbnRzIHRoYXQgbXVzdCBiZSBsYXRlciBjcmVhdGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUyNzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgTGF6eU5vZGUgY2xh
c3MgaW4gREZHIHRoYXQgcmVwcmVzZW50cyBlaXRoZXIgYSBOb2RlKiwKKyAgICAgICAgb3IgYSBG
cm96ZW5WYWx1ZSogd2l0aCBhIHdheSB0byBjb252ZXJ0IGl0IHRvIGEgTm9kZSogcHJvdmlkZWQg
YSBibG9jaworICAgICAgICB0byBpbnNlcnQgaXQgaW50by4gREZHQ2xvYmJlcml6ZSBpcyBjb252
ZXJ0ZWQgdG8gdXNlIExhenlOb2RlIGluc3RlYWQKKyAgICAgICAgb2YgTm9kZSogd2hlbiBkZWYo
KSdpbmcgdmFsdWVzLCB3aGljaCBhbGxvd3MgdG8gbm93IGRlZmluZSB0aGUgYXJyYXkncworICAg
ICAgICBsZW5ndGggYXMgd2VsbCBhcyB0aGUgdmFsdWUgb2YgaXRzIHZhcmlvdXMgZmllbGRzIGlu
IE5ld0FycmF5IGFuZAorICAgICAgICBOZXdBcnJheUJ1ZmZlciBub2Rlcy4KKworICAgICAgICBX
ZSBhbHNvIGludHJvZHVjZSBhIFZlY3Rvcjx1aW50MzJfdD4gaW4gREZHOjpHcmFwaCB0byBjb2xs
ZWN0IGFsbCB0aGUKKyAgICAgICAgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5kZXgsIGlu
IG9yZGVyIHRvIGF2b2lkIGRlZigpJ2luZyB0b28gbWFueQorICAgICAgICB2YWx1ZXMgYXQgb25j
ZSBmb3IgYmlnIE5ld0FycmF5QnVmZmVycy4KKworICAgICAgICBIZWFwTG9jYXRpb24gaGFkIHRv
IGJlIHVwZGF0ZWQgdG8gdXNlIGEgTGF6eU5vZGUgYXMgaXRzIGluZGV4IHRvIGJlCisgICAgICAg
IGFibGUgdG8gZGVmaW5lIGFycmF5IHZhbHVlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAg
KEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmcmVlemVGcmFnaWxl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0
aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6SGVhcExvY2F0aW9uOjpIZWFwTG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkhlYXBMb2NhdGlvbjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpE
Rkc6OkhlYXBMb2NhdGlvbjo6aGFzaCk6CisgICAgICAgICogZGZnL0RGR0xhenlOb2RlLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmR1bXApOgorICAgICAgICAqIGRm
Zy9ERkdMYXp5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6TGF6
eU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpzZXROb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMYXp5Tm9kZTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpERkc6OkxhenlOb2RlOjppc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2Rl
OjpvcCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6OmFzTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6TGF6eU5vZGU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2Rl
OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6
OkxhenlOb2RlOjplbnN1cmVJc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpv
cGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMYXp5Tm9kZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6REZH
OjpMYXp5Tm9kZTo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOgorICAgICAgICAoSlND
OjpERkc6OkxhenlOb2RlOjpzZXRGcm96ZW5WYWx1ZSk6CisgICAgICAgICogZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9i
YmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuY3BwOgorCiAyMDE1LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQmV0dGVyIG9wdGltaXplICdpZicgd2l0aCB0ZXJuYXJpZXMgY29uZGl0aW9uYWwg
dGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2U2MjJhMDc4MjBm
YzhlNWZmMGFkYzA3YzA1NmFmZjZjNzVkZjI4Mi4uMjAzZjU0MGU4NGY1ODNlN2JmOWNlYTAyMTk1
ODIzNjRmOWQ1Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTg3
LDYgKzE4Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0p1bXBS
ZXBsYWNlbWVudC5jcHAKICAgICBkZmcvREZHTElDTVBoYXNlLmNwcAogICAgIGRmZy9ERkdMYXp5
SlNWYWx1ZS5jcHAKKyAgICBkZmcvREZHTGF6eU5vZGUuY3BwCiAgICAgZGZnL0RGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCiAgICAgZGZn
L0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKaW5kZXggY2ZhOGQzODY4OTU3OGNjMzE1ODhhZGE5NjI5N2IxNjhmNWIy
Yjc5MC4uMzZjYzczNzA0YTU4Mjc5ZmZjYjcxOGNiOTQ5OGIzNzljZDJiOWE2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC00MjMsNiArNDIzLDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5hbGl6ZXIuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuY3BwIiAvPgpAQCAtMTEx
NSw2ICsxMTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5h
bGl6ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKdW1wUmVwbGFj
ZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMYXp5SlNWYWx1
ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTElDTVBoYXNlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuaCIgLz4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRl
eCA4ODU5NTEyNDk0MTU1NjJhOWI0MWZkZDlkMDRmOGEyMzA1OTI2NTIzLi45M2ZlNWUyNjkwMzc1
NmI5NWE3OThmYTE3NTViM2QyMzRjMjNjMDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xMTkxLDYgKzExOTEsOSBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1ZhbHVlLmNwcCI+CiAgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0xhenlOb2RlLmNwcCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xJQ01Q
aGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
QEAgLTM1NjIsNiArMzU2NSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TGF6eUpTVmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xhenlOb2RlLmgiPgorICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBh
YzlkMjU4MmRmNjBlNTdjNTZmMDAwYmUwODFiYzdhYmQ3MWI0MGE1Li5lNDg4MzNjNWM5ODFmMTA0
N2ZmMDdkZTY2NTI4NDk2MmNhMTU5MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtOTYwLDYgKzk2MCw4IEBACiAJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk2MkQyRDM4RjFBREYxMDNGMDAwMjA2QzEg
LyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0
YS5jcHAgKi87IH07CiAJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQy
RDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTYyRjJBQTM3MUIwQkVERTMwMDYx
MEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuY3Bw
ICovOyB9OworCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyQTlBMjlGMUIwQkVE
NDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3RDg5NiAvKiBKU1R5cGVJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTA3
RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MTEyMkZEMTQwNDZBNEMwMDJCMTAxRCAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk2NTExMjJGRTE0MDQ2QTRDMDAyQjEwMUQgLyogbGli
ZWRpdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliICovOyB9OwpAQCAt
MjY3Myw2ICsyNjc1LDggQEAKIAkJNURBRkQ2Q0IxNDZCNjg2MzAwRkJFRkI0IC8qIEpTQy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBKU0MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVERERGNDQ2MTRGRUU3MjIwMEI0RkI0RCAvKiBMTEludERlc2lyZWRPZmZzZXRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50RGVzaXJlZE9mZnNldHMuaDsg
cGF0aCA9IExMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTVERTNEMEY0MEREOERERkIwMDQ2ODcxNCAvKiBXZWJL
aXRBdmFpbGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0
QXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyQTlBMjlFMUIw
QkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdMYXp5Tm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0Eg
LyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGF6
eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvblJhcmVEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEUxQURGMTAzRjAwMDIwNkMx
IC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RnVuY3Rpb25SYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTA3RDI5
NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1R5cGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
OTg5LDYgKzQ5OTMsOCBAQAogCQkJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1w
UmVwbGFjZW1lbnQuaCAqLywKIAkJCQlBNzNBNTM1ODE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6
eUpTVmFsdWUuY3BwICovLAogCQkJCUE3M0E1MzU5MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5
SlNWYWx1ZS5oICovLAorCQkJCTYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9k
ZS5jcHAgKi8sCisJCQkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmgg
Ki8sCiAJCQkJQTdEOUEyOTIxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5jcHAgKi8s
CiAJCQkJQTdEOUEyOTMxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oICovLAogCQkJ
CUE3RDg5Q0VDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
ICovLApAQCAtNTg2Nyw2ICs1ODczLDcgQEAKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDgg
LyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBE
RkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQy
IC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQw
MkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICov
LApAQCAtNzI0Nyw2ICs3MjU0LDcgQEAKIAkJCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1MDA5REY3
NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y0MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCmluZGV4IDE0MTM4NDMyMjIyMjc5Y2E4N2M0ZmViY2JjNmZhNWNhYzA1YjE4ODQuLmU4
NzA1ODkwYjI0NTRiZGM3OTA4NjQ2ODFiZTc0MWE2MjUzNmQzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgICAgICBM
YXp5Tm9kZSBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQogICAgICAgICB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ltcHVyZUxlbmd0aDsgaS0tOykgewog
ICAgICAgICAgICAgICAgIGlmIChtX2ltcHVyZU1hcFtpXS5rZXkgPT0gbG9jYXRpb24pCkBAIC0x
NTcsMTggKzE1NywyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KICAgICAKLSAgICAgICAgTm9kZSogYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiwgTm9kZSogbm9kZSkKKyAgICAgICAgTGF6eU5vZGUgYWRkSW1wdXJlKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKE5v
ZGUqIHJlc3VsdCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbikpCisgICAgICAgICAgICAvLyBG
SVhNRTogSWYgd2UgYXJlIHVzaW5nIHNtYWxsIG1hcHMsIHdlIG11c3Qgbm90IGRlZigpIGRlcml2
ZWQgdmFsdWVzLgorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGUgb25seSBkZXJpdmVkIHZhbHVl
cyB3ZSBkZWYoKSBhcmUgY29uc3RhbnQtYmFzZWQuCisgICAgICAgICAgICBpZiAobG9jYXRpb24u
aW5kZXgoKSAmJiAhbG9jYXRpb24uaW5kZXgoKS5pc05vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChMYXp5Tm9kZSByZXN1bHQgPSBmaW5kUmVw
bGFjZW1lbnQobG9jYXRpb24pKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICBBU1NFUlQobV9pbXB1cmVMZW5ndGggPCBjYXBhY2l0eSk7Ci0gICAgICAgICAgICBt
X2ltcHVyZU1hcFttX2ltcHVyZUxlbmd0aCsrXSA9IFdURjo6S2V5VmFsdWVQYWlyPEhlYXBMb2Nh
dGlvbiwgTm9kZSo+KGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgICAgIG1faW1wdXJlTWFwW21f
aW1wdXJlTGVuZ3RoKytdID0gV1RGOjpLZXlWYWx1ZVBhaXI8SGVhcExvY2F0aW9uLCBMYXp5Tm9k
ZT4obG9jYXRpb24sIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IH0KICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxQdXJlVmFs
dWUsIE5vZGUqPiBtX3B1cmVNYXBbY2FwYWNpdHldOwotICAgICAgICBXVEY6OktleVZhbHVlUGFp
cjxIZWFwTG9jYXRpb24sIE5vZGUqPiBtX2ltcHVyZU1hcFtjYXBhY2l0eV07CisgICAgICAgIFdU
Rjo6S2V5VmFsdWVQYWlyPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1faW1wdXJlTWFwW2NhcGFj
aXR5XTsKICAgICAgICAgdW5zaWduZWQgbV9wdXJlTGVuZ3RoOwogICAgICAgICB1bnNpZ25lZCBt
X2ltcHVyZUxlbmd0aDsKICAgICB9OwpAQCAtMTk4LDEyICsyMDIsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBOb2RlKiBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9u
KQorICAgICAgICBMYXp5Tm9kZSBmaW5kUmVwbGFjZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9u
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbXB1cmVNYXAuZ2V0KGxvY2F0aW9u
KTsKICAgICAgICAgfQogICAgIAotICAgICAgICBOb2RlKiBhZGRJbXB1cmUoSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgICAgICBMYXp5Tm9kZSBhZGRJbXB1cmUoSGVhcExv
Y2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IG1faW1wdXJlTWFwLmFkZChsb2NhdGlvbiwgbm9kZSk7CiAgICAgICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCkBAIC0yMTMsNyArMjE3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJlTWFw
OwotICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTm9kZSo+IG1faW1wdXJlTWFwOworICAg
ICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1faW1wdXJlTWFwOwogICAgIH07
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBzPgpAQCAtMjIxLDYgKzIyNSw3IEBAIHByaXZh
dGU6CiAgICAgcHVibGljOgogICAgICAgICBCbG9ja0NTRShHcmFwaCYgZ3JhcGgpCiAgICAgICAg
ICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBo
KQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAKQEAgLTIyOCw2ICsyMzMsNyBAQCBwcml2YXRl
OgogICAgICAgICB7CiAgICAgICAgICAgICBtX21hcHMuY2xlYXIoKTsKICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAgICAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBtX25vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKQEAgLTI5Nyw2ICszMDMsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CiAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAg
ICAgICAgfQpAQCAtMzE4LDkgKzMyNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgCi0gICAgICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTm9kZSogdmFsdWUpCisgICAgICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTGF6eU5vZGUgdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUqIG1h
dGNoID0gbV9tYXBzLmFkZEltcHVyZShsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICAgICAgTGF6
eU5vZGUgbWF0Y2ggPSBtX21hcHMuYWRkSW1wdXJlKGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0z
NDMsOCArMzUxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVh
ZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFj
ZVdpdGgobWF0Y2gpOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5pc05vZGUoKSAmJiB2YWx1ZS5hc05vZGUoKSA9PSBtX25vZGUpIHsKKyAgICAg
ICAgICAgICAgICBtYXRjaC5lbnN1cmVJc05vZGUobV9pbnNlcnRpb25TZXQsIG1fYmxvY2ssIDAp
LT5vd25lciA9IG1fYmxvY2s7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoLmlzTm9kZSgp
KTsKKyAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VXaXRoKG1hdGNoLmFzTm9kZSgpKTsK
KyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTM1Miw4ICszNjQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbV9jaGFuZ2VkOwogICAgICAgICBOb2RlKiBtX25vZGU7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgCiAgICAgICAgIE1hcHMgbV9tYXBzOwor
CisgICAgICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICB9OwogCiAgICAgQmxv
Y2tDU0U8U21hbGxNYXBzPiBtX3NtYWxsQmxvY2s7CkBAIC0zNjUsNiArMzgwLDcgQEAgcHVibGlj
OgogICAgIEdsb2JhbENTRVBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFw
aCwgImdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCiAgICAgICAgICwg
bV9pbXB1cmVEYXRhTWFwKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC00MjksNiArNDQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICI6XG4iKTsKIAog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Js
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9ub2RlSW5kZXgg
PSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgbV9ub2RlID0gbV9ibG9jay0+YXQobm9kZUlu
ZGV4KTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICBMb29raW5nIGF0IG5vZGUgIiwgbV9ub2RlLCAiOlxuIik7CkBAIC00NDEsNiAr
NDU4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
ICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG1fbm9kZSwgKnRoaXMpOwogICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2ltcHVyZURhdGEtPmRpZFZpc2l0ID0gdHJ1ZTsKICAgICAgICAg
fQpAQCAtNDg2LDEzICs1MDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChtX25vZGUpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBmaW5kUmVwbGFj
ZW1lbnQoSGVhcExvY2F0aW9uIGxvY2F0aW9uKQorICAgIExhenlOb2RlIGZpbmRSZXBsYWNlbWVu
dChIZWFwTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewogICAgICAgICAvLyBBdCB0aGlzIGluc3Rh
bnQsIG91ciAiYXZhaWxhYmxlQXRUYWlsIiByZWZsZWN0cyB0aGUgc2V0IG9mIHRoaW5ncyB0aGF0
IGFyZSBhdmFpbGFibGUgaW4KICAgICAgICAgLy8gdGhpcyBibG9jayBzbyBmYXIuIFdlIGNoZWNr
IHRoaXMgbWFwIHRvIGZpbmQgYmxvY2stbG9jYWwgQ1NFIG9wcG9ydHVuaXRpZXMgYmVmb3JlIGRv
aW5nCiAgICAgICAgIC8vIGEgZ2xvYmFsIHNlYXJjaC4KLSAgICAgICAgTm9kZSogbWF0Y2ggPSBt
X2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwotICAgICAgICBpZiAo
bWF0Y2gpIHsKKyAgICAgICAgTGF6eU5vZGUgbWF0Y2ggPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJs
ZUF0VGFpbC5nZXQobG9jYXRpb24pOworICAgICAgICBpZiAoISFtYXRjaCkgewogICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgRm91bmQgbG9j
YWwgbWF0Y2g6ICIsIG1hdGNoLCAiXG4iKTsKICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKQEAg
LTU3NSw3ICs1OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRhLmF2
YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eTogIiwg
bWF0Y2gsICJcbiIpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAg
ICAgIGlmICghIW1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGV4YW1pbmUg
dGhlIHByZWRlY2Vzc29ycyBvZiBhIG1hdGNoLiBBdCB0aGlzIHBvaW50IHdlIGp1c3Qgd2FudCB0
bwogICAgICAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2ggdGhhdCBvdGhlciBibG9ja3Mgb24g
dGhlIHBhdGggZnJvbSBoZXJlIHRvIHRoZXJlIGRvbid0IGNsb2JiZXIKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIGxvY2F0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uCkBAIC02MTYsMTIgKzYz
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB2YWx1ZSkKKyAgICB2b2lkIGRl
ZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgR290IGhlYXAgbG9jYXRpb24g
ZGVmOiAiLCBsb2NhdGlvbiwgIiAtPiAiLCB2YWx1ZSwgIlxuIik7CiAgICAgICAgIAotICAgICAg
ICBOb2RlKiBtYXRjaCA9IGZpbmRSZXBsYWNlbWVudChsb2NhdGlvbik7CisgICAgICAgIExhenlO
b2RlIG1hdGNoID0gZmluZFJlcGxhY2VtZW50KGxvY2F0aW9uKTsKICAgICAgICAgCiAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgR290IG1hdGNoOiAiLCBt
YXRjaCwgIlxuIik7CkBAIC02MzMsOSArNjUyLDMzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0
Y2gpOwotICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh2YWx1ZS5pc05v
ZGUoKSAmJiB2YWx1ZS5hc05vZGUoKSA9PSBtX25vZGUpIHsKKyAgICAgICAgICAgIGlmICghbWF0
Y2guaXNOb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHByb3Blcmx5IHJl
Y29yZCB0aGUgY29uc3RhbnQgaW4gb3JkZXIgdG8gdXNlIGFuIGV4aXN0aW5nIG9uZSBpZiBhcHBs
aWNhYmxlLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHJlLXJ1bm5pbmcg
R0NTRSB3aWxsIG5vdCBmaW5kIG5ldyBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIG1h
dGNoLmVuc3VyZUlzTm9kZShtX2luc2VydGlvblNldCwgbV9ibG9jaywgbV9ub2RlSW5kZXgpLT5v
d25lciA9IG1fYmxvY2s7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX3B1cmVWYWx1
ZXMuYWRkKFB1cmVWYWx1ZShtYXRjaC5hc05vZGUoKSwgbWF0Y2gtPmNvbnN0YW50KCkpLCBWZWN0
b3I8Tm9kZSo+KCkpOworICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoLnNldE5vZGUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlZCkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWF0Y2guYXNO
b2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKG1hdGNoLmFzTm9kZSgp
KTsKKyAgICAgICAgICAgIG1fbm9kZS0+cmVwbGFjZVdpdGgobWF0Y2guYXNOb2RlKCkpOworICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBz
dHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKQEAgLTY1Niw4ICs2OTksMTAgQEAgcHVibGljOgogICAg
IAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9ub2RlOworICAgIHVuc2ln
bmVkIG1fbm9kZUluZGV4OwogICAgIEltcHVyZUJsb2NrRGF0YSogbV9pbXB1cmVEYXRhOwogICAg
IENsb2JiZXJTZXQgbV93cml0ZXNTb0ZhcjsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7CiAgICAgCiAgICAgYm9vbCBtX2NoYW5nZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA1MjNkNzIzYjU3MGFjNTAwNmRlOGNhMDFkY2ExY2Ew
ZjRkNGUzMzg2Li45MTk3ZTQ1MjMzZDViNWQ2MGUxZGQ5OTI5ZmU4ZTI1ODBkNjM3NzdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlICJERkdIZWFwTG9jYXRpb24uaCIKKyNpbmNsdWRlICJERkdMYXp5Tm9kZS5o
IgogI2luY2x1ZGUgIkRGR1B1cmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CkBAIC0xOTUsNyArMTk2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQoQnV0
dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQ
cm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKEhlYXApOwpAQCAtMjA2LDcgKzIw
Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICBpZiAobW9kZS5pc0lu
Qm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OwogICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwotICAgICAg
ICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
RG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7
CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2Ms
IEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmVhZChIZWFwKTsKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAg
ICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJv
cGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6
eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJlYWQoSGVhcCk7CkBAIC0zMDMsNyArMzA0LDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAg
d3JpdGUoU2lkZVN0YXRlKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Q
b2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9pbnRfZmlyZSksIExhenlOb2RlKG5vZGUp
KTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKQEAgLTM1NCwxNyArMzU1LDE3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRp
b24oVmFySW5qZWN0aW9uV2F0Y2hwb2ludExvYywgTWlzY0ZpZWxkcyksIG5vZGUpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFZhckluamVjdGlvbldhdGNocG9pbnRMb2MsIE1pc2NGaWVsZHMp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgSXNPYmplY3RP
ck51bGw6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRp
b24oSXNPYmplY3RPck51bGxMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7
CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSXNPYmplY3RPck51bGxMb2MsIE1pc2NGaWVsZHMs
IG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIGNhc2UgSXNGdW5jdGlvbjoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihJc0Z1bmN0aW9uTG9jLCBNaXNjRmllbGRzLCBub2RlLT5j
aGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElzRnVuY3Rpb25Mb2Ms
IE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlJZDoKQEAgLTM5MSw0NSArMzkyLDQ1IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOgog
ICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEdldHRlckxvYywgR2V0dGVyU2V0dGVyX2dldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2Rl
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihHZXR0ZXJMb2MsIEdldHRlclNldHRlcl9nZXR0
ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0U2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9z
ZXR0ZXIpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFNldHRlckxvYywgR2V0dGVyU2V0dGVy
X3NldHRlciwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihTZXR0ZXJMb2MsIEdldHRlclNldHRlcl9zZXR0ZXIsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5v
ZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVl
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0g
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgSlNT
dGFjazo6Q2FsbGVlKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9j
LCBBYnN0cmFjdEhlYXAoU3RhY2ssIEpTU3RhY2s6OkNhbGxlZSkpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50Ogog
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJzdHJhY3RIZWFw
KFN0YWNrLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG5vZGUpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFN0YWNrUGF5bG9hZExvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRM
b2NhbDoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwg
TGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFj
aywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKICAgICAgICAgcmVhZChoZWFwKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIG5vZGUpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAg
ICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9j
YWwpOwogICAgICAgICB3cml0ZShoZWFwKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFj
a0xvYywgaGVhcCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC00NTYsNyArNDU3LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgp
KSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRCeVZhbDogewpAQCAtNDkxLDE5ICs0OTIsMTkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAgICAg
ICAgICAgICByZWFkKERpcmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMpOwotICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3BlcnRp
ZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIERpcmVjdEFyZ3VtZW50c1Byb3Bl
cnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpT
Y29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICByZWFkKFNjb3BlUHJvcGVydGllcyk7Ci0gICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgU2NvcGVQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBTY29wZVByb3BlcnRpZXMsIG5v
ZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAg
ICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50
MzJQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQ
cm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTUxNCw3ICs1MTUs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFk
RnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJv
dW5kcygpKSB7CiAgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKLSAgICAgICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJs
ZVByb3BlcnRpZXMsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAg
ICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
RG91YmxlUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5v
ZGUobm9kZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJlYWQoV29ybGQpOwpAQCAtNTI1LDcgKzUyNiw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAg
ICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwogICAgICAgICAgICAgICAgIHJlYWQo
SW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CkBAIC01NTQsNyArNTU1LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAgICAgICAgcmVhZChUeXBlZEFy
cmF5UHJvcGVydGllcyk7CiAgICAgICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIFR5cGVkQXJyYXlQcm9wZXJ0
aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSW5kZXhlZFByb3BlcnR5TG9jLCBUeXBlZEFycmF5UHJvcGVydGll
cywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9kZSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC02MDUsNyArNjA2LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgICAgIHdyaXRlKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOwogICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAgd3Jp
dGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5kZXgp
LCB2YWx1ZSk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eUxv
YywgSW5kZXhlZEludDMyUHJvcGVydGllcywgYmFzZSwgaW5kZXgpLCBMYXp5Tm9kZSh2YWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKQEAgLTYyMCw3ICs2MjEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
ICAgICAgICAgd3JpdGUoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwogICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAgd3Jp
dGUoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEluZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGJhc2UsIGluZGV4
KSwgdmFsdWUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlM
b2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBiYXNlLCBpbmRleCksIExhenlOb2RlKHZhbHVl
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKQEAgLTYzNSw3ICs2MzYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVG
dQogICAgICAgICAgICAgd3JpdGUoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAg
ICAgICAgIHdyaXRlKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cywgYmFzZSwgaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKElu
ZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBiYXNlLCBpbmRl
eCksIExhenlOb2RlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNjgxLDEyICs2ODIsMTIgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAg
ICAgICAgcmVhZChKU0NlbGxfdHlwZUluZm9GbGFncyk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRp
b24oQ2hlY2tIYXNJbnN0YW5jZUxvYywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxk
MSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2hlY2tIYXNJbnN0YW5jZUxv
YywgSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkp
OwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIHJlYWQo
SlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbnN0YW5jZU9m
TG9jLCBKU0NlbGxfc3RydWN0dXJlSUQsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSks
IG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluc3RhbmNlT2ZMb2MsIEpTQ2VsbF9z
dHJ1Y3R1cmVJRCwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSwgTGF6eU5vZGUobm9k
ZSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTY5OCwx
OCArNjk5LDE4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNv
bnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIAogICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZs
eSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0
ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
QnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5v
ZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwogICAg
ICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUp
OworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVy
Zmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgcmVhZChKU09iamVjdF9i
dXR0ZXJmbHkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmpl
Y3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSks
IExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEFy
cmF5aWZ5OgpAQCAtNzI5LDEyICs3MzAsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwot
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2MsIE1pc2NG
aWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9k
ZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlZEFycmF5
Qnl0ZU9mZnNldExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2Rl
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKQEAg
LTc0Miw3ICs3NDMsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pZGVudGlmaWVy
TnVtYmVyOwogICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChOYW1lZFByb3BlcnRpZXMsIGlkZW50
aWZpZXJOdW1iZXIpOwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQy
KCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApA
QCAtNzUxLDcgKzc1Miw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQo
SlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoTmFtZWRQcm9w
ZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIpOwog
ICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE5hbWVkUHJvcGVy
dHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShu
b2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNzY0LDcgKzc2NSw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3Ry
dWN0dXJlSUQpOwogICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5yZWFs
bG9jYXRlc1N0b3JhZ2UoKSkKICAgICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oTmFtZWRQcm9wZXJ0eUxvYywgaGVhcCwgbm9kZS0+
Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApA
QCAtNzcyLDcgKzc3Myw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmlkZW50aWZp
ZXJOdW1iZXI7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKE5hbWVkUHJvcGVydGllcywgaWRl
bnRpZmllck51bWJlcik7CiAgICAgICAgIHdyaXRlKGhlYXApOwotICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKE5hbWVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUtPmNoaWxkMigpKSwgbm9kZS0+Y2hp
bGQzKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihOYW1lZFByb3BlcnR5TG9j
LCBoZWFwLCBub2RlLT5jaGlsZDIoKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTc4NSw3ICs3ODYsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihBcnJheUxlbmd0aExvYywgQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgbm9kZS0+Y2hpbGQxKCkp
LCBub2RlKTsKKyAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKQEAgLTc5NSw2MyArNzk2LDE1MCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNj
b3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Ci0gICAgICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGls
ZDEoKSksIG5vZGUpOworICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJheUxlbmd0aExv
YywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IEFTU0VSVChtb2RlLnR5cGVkQXJyYXlUeXBlKCkgIT0gTm90VHlwZWRBcnJheSk7CiAgICAgICAg
ICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihBcnJh
eUxlbmd0aExvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBub2RlKTsKKyAgICAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNo
aWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQo
KSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJh
Y3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5v
ZGUtPmNoaWxkMSgpKSwgbm9kZSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNl
dCgpLm9mZnNldCgpKSwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICB3cml0
ZShBYnN0cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNldCgpLm9mZnNl
dCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0
cmFjdEhlYXAoU2NvcGVQcm9wZXJ0aWVzLCBub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpKSwg
bm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGll
cywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5v
ZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CiAgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKERp
cmVjdEFyZ3VtZW50c1Byb3BlcnRpZXMsIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCku
b2Zmc2V0KCkpOwogICAgICAgICByZWFkKGhlYXApOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIG5vZGUpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKERpcmVjdEFyZ3VtZW50c0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czogewogICAg
ICAgICBBYnN0cmFjdEhlYXAgaGVhcChEaXJlY3RBcmd1bWVudHNQcm9wZXJ0aWVzLCBub2RlLT5j
YXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKTsKICAgICAgICAgd3JpdGUoaGVhcCk7
Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oRGlyZWN0QXJndW1lbnRzTG9jLCBoZWFwKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihEaXJlY3RBcmd1
bWVudHNMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAg
ICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkp
OwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhl
YXAoQWJzb2x1dGUsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIG5vZGUpOworICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUs
IG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpOwotICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKEdsb2JhbFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoQWJzb2x1dGUs
IG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oR2xvYmFsVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChBYnNv
bHV0ZSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2Fz
ZSBOZXdBcnJheVdpdGhTaXplOgotICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgY2FzZSBO
ZXdUeXBlZEFycmF5OgotICAgICAgICAvLyBGSVhNRTogRW5hYmxlIENTRSBmb3IgdGhlc2Ugbm9k
ZXMuIFdlIGNhbid0IGRvIHRoaXMgcmlnaHQgbm93IGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5Ci0g
ICAgICAgIC8vIGZvciB1cyB0byBjbGFpbSBhbiBpbmRleCBub2RlIGFuZCBhIHZhbHVlIG5vZGUu
IFdlIGNvdWxkIG1ha2UgdGhpcyB3b3JrIGlmIHdlIGxvd2VyZWQKLSAgICAgICAgLy8gdGhlc2Ug
bm9kZXMgb3IgaWYgd2UgaGFkIGEgbW9yZSBmbGV4aWJsZSB3YXkgb2YgZGVmKCknaW5nLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzM3CiAg
ICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENv
dW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBOZXdBcnJheTogeworICAgICAgICBy
ZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBub2RlLT5udW1DaGlsZHJlbigpOworCisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oQXJyYXlMZW5ndGhMb2MsIEJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgsIG5vZGUpLAorICAgICAgICAgICAgTGF6eU5vZGUoZ3JhcGguZnJlZXplKGpzTnVtYmVy
KG51bUVsZW1lbnRzKSkpKTsKKworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwOworICAgICAgICBzd2l0Y2gg
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgIGhlYXAgPSBJbmRleGVkRG91YmxlUHJvcGVydGllczsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRJbnQzMlByb3BlcnRpZXM7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgaGVhcCA9IEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobnVtRWxlbWVudHMgPCBncmFwaC5tX3VpbnQzMlZhbHVlc0lu
VXNlLnNpemUoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsg
b3BlcmFuZElkeCA8IG51bUVsZW1lbnRzOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAgICAg
ICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
b3BlcmFuZElkeF07CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihvcGVy
YW5kSWR4KSkpKSwKKyAgICAgICAgICAgICAgICAgICAgTGF6eU5vZGUodXNlLm5vZGUoKSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1aW50MzJf
dCBvcGVyYW5kSWR4IDogZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZSkgeworICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kSWR4ID49IG51bUVsZW1lbnRzKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IGdyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihJbmRleGVkUHJvcGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdy
YXBoLmZyZWV6ZShqc051bWJlcihvcGVyYW5kSWR4KSkpKSwKKyAgICAgICAgICAgICAgICAgICAg
TGF6eU5vZGUodXNlLm5vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOiB7CisgICAgICAgIHJl
YWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKKwor
ICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNvbnN0YW50cygpOworICAg
ICAgICBkZWYoSGVhcExvY2F0aW9uKEFycmF5TGVuZ3RoTG9jLCBCdXR0ZXJmbHlfcHVibGljTGVu
Z3RoLCBub2RlKSwKKyAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihu
dW1FbGVtZW50cykpKSk7CisKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXA7CisgICAgICAgIE5v
ZGVUeXBlIG9wID0gSlNDb25zdGFudDsKKyAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICBoZWFwID0gSW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CisgICAgICAgICAgICBvcCA9IERv
dWJsZUNvbnN0YW50OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBTExfSU5U
MzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZEludDMyUHJvcGVy
dGllczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBoZWFwID0gSW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBncmFwaC5t
X2NvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS0+c3RhcnRDb25zdGFudCgpKTsKKyAgICAg
ICAgaWYgKG51bUVsZW1lbnRzIDwgZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZS5zaXplKCkpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUVsZW1lbnRz
OyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihpbmRl
eCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShkYXRhW2lu
ZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmb3IgKHVpbnQzMl90IGluZGV4IDogZ3JhcGgubV91aW50MzJWYWx1ZXNJblVzZSkgeworICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA+PSBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihJbmRleGVkUHJv
cGVydHlMb2MsIGhlYXAsIG5vZGUsIExhenlOb2RlKGdyYXBoLmZyZWV6ZShqc051bWJlcihpbmRl
eCkpKSksCisgICAgICAgICAgICAgICAgICAgIExhenlOb2RlKGdyYXBoLmZyZWV6ZShkYXRhW2lu
ZGV4XSksIG9wKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNh
c2UgTmV3U3RyaW5nT2JqZWN0OgpAQCAtMTAzOSw3ICsxMTI3LDcgQEAgcHVibGljOgogICAgICAg
ICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpIGNvbnN0CisgICAgdm9pZCBvcGVyYXRv
cigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkgY29uc3QKICAgICB7CiAg
ICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDk1NGMyMjhmYmEzMzNhODFlZDQzNGM2NmIzZTNh
OGFiNjBkMzQ0OWUuLjNlNTA4NGI0MjUxMWU4OTgyNjBiOTFhM2M3MWYwNjcwM2IyOWJhYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMjEwLDYgKzEyMTAsOSBA
QCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZUZyYWdpbGUoSlNWYWx1ZSB2YWx1ZSkKICAgICBh
dXRvIHJlc3VsdCA9IG1fZnJvemVuVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSks
IG51bGxwdHIpOwogICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc05ld0VudHJ5KSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBpZiAodmFsdWUuaXNVSW50MzIo
KSkKKyAgICAgICAgbV91aW50MzJWYWx1ZXNJblVzZS5hcHBlbmQodmFsdWUuYXNVSW50MzIoKSk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2Zyb3plblZhbHVl
cy5hZGQoRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCmluZGV4IDY1YTYzZTBiM2Q0NGRkZjFjZjMyZWRiZTI3MzQwNTU2NWM4MTM0
YzQuLmJhYzUzOGYwMjVkM2VjZTEzN2JlMzE3ODA2ODgxNWQ5NTM3Yzk1YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTgwNiw2ICs4MDYsOCBAQCBwdWJsaWM6CiAKICAg
ICBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCBGcm96ZW5WYWx1ZSosIEVuY29kZWRKU1ZhbHVlSGFz
aCwgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRzPiBtX2Zyb3plblZhbHVlTWFwOwogICAgIEJhZzxG
cm96ZW5WYWx1ZT4gbV9mcm96ZW5WYWx1ZXM7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fdWlu
dDMyVmFsdWVzSW5Vc2U7CiAgICAgCiAgICAgQmFnPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3Jh
Z2VBY2Nlc3NEYXRhOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdIZWFwTG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmgKaW5kZXggY2UyN2VmNGJmNzE5YjdjZDBkOWEwNGI2ZWNhMTk4NTYzNmVjMTIyMy4u
M2QzYTk0Y2NmMTM4NjE4MjdlYzI4YzkxNTdkNTZhMjIxNGY2YWE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRl
ICJERkdMYXp5Tm9kZS5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgSGVhcExvY2F0
aW9uKAogICAgICAgICBMb2NhdGlvbktpbmQga2luZCA9IEludmFsaWRMb2NhdGlvbktpbmQsCiAg
ICAgICAgIEFic3RyYWN0SGVhcCBoZWFwID0gQWJzdHJhY3RIZWFwKCksCi0gICAgICAgIE5vZGUq
IGJhc2UgPSBudWxscHRyLCBOb2RlKiBpbmRleCA9IG51bGxwdHIpCisgICAgICAgIE5vZGUqIGJh
c2UgPSBudWxscHRyLCBMYXp5Tm9kZSBpbmRleCA9IExhenlOb2RlKCkpCiAgICAgICAgIDogbV9r
aW5kKGtpbmQpCiAgICAgICAgICwgbV9oZWFwKGhlYXApCiAgICAgICAgICwgbV9iYXNlKGJhc2Up
CkBAIC03NCw2ICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghIW1faGVhcCB8fCAh
bV9iYXNlKTsKICAgICAgICAgQVNTRVJUKG1fYmFzZSB8fCAhbV9pbmRleCk7CiAgICAgfQorCisg
ICAgSGVhcExvY2F0aW9uKExvY2F0aW9uS2luZCBraW5kLCBBYnN0cmFjdEhlYXAgaGVhcCwgTm9k
ZSogYmFzZSwgTm9kZSogaW5kZXgpCisgICAgICAgIDogSGVhcExvY2F0aW9uKGtpbmQsIGhlYXAs
IGJhc2UsIExhenlOb2RlKGluZGV4KSkKKyAgICB7CisgICAgfQogICAgIAogICAgIEhlYXBMb2Nh
dGlvbihMb2NhdGlvbktpbmQga2luZCwgQWJzdHJhY3RIZWFwIGhlYXAsIEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCA9IEVkZ2UoKSkKICAgICAgICAgOiBIZWFwTG9jYXRpb24oa2luZCwgaGVhcCwgYmFz
ZS5ub2RlKCksIGluZGV4Lm5vZGUoKSkKQEAgLTkzLDExICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
TG9jYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBBYnN0cmFj
dEhlYXAgaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQogICAgIE5vZGUqIGJhc2UoKSBj
b25zdCB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICBOb2RlKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICBMYXp5Tm9kZSBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2tpbmQgKyBtX2hlYXAuaGFzaCgpICsgV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX2lu
ZGV4KSArIG1fa2luZDsKKyAgICAgICAgcmV0dXJuIG1fa2luZCArIG1faGVhcC5oYXNoKCkgKyBt
X2luZGV4Lmhhc2goKSArIG1fa2luZDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEhlYXBMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CkBAIC0xMTksNyArMTI1LDcgQEAgcHJp
dmF0ZToKICAgICBMb2NhdGlvbktpbmQgbV9raW5kOwogICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7
CiAgICAgTm9kZSogbV9iYXNlOwotICAgIE5vZGUqIG1faW5kZXg7CisgICAgTGF6eU5vZGUgbV9p
bmRleDsKIH07CiAKIHN0cnVjdCBIZWFwTG9jYXRpb25IYXNoIHsKQEAgLTE0OCw3ICsxNTQsNyBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQwogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLXR5cGVkZWYgSGFzaE1hcDxIZWFwTG9jYXRpb24sIE5vZGUqPiBJbXB1cmVNYXA7Cit0
eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gSW1wdXJlTWFwOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5
Tm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0ZWQ5ODU1ZDVlZTJhNTM2MmE5YzE3YjdhNTczMTRiMmEy
NTQ2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eU5vZGUuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGF6eU5v
ZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3ZvaWQgTGF6eU5vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBpZiAoISp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIkxhenlOb2RlOjAiKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKGlzTm9kZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJMYXp5
Tm9kZTpAIiwgYXNOb2RlKCktPmluZGV4KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
dXQucHJpbnQoIkxhenlOb2RlOkZyb3plblZhbHVlOiIsIEdyYXBoOjpvcE5hbWUob3AoKSksICIs
ICIsIHBvaW50ZXJEdW1wKGFzVmFsdWUoKSkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAg
ICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEyNTcxZjdhYmFjYjBmZWU5ZjI2N2IzZGY2ZWIwNmZjZTk3YzY5NWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKQEAgLTAsMCArMSwx
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERGR0xhenlOb2RlX2gKKyNkZWZpbmUgREZHTGF6eU5vZGVfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCisKKworY2xhc3MgTGF6eU5vZGUgeworcHVibGljOgorICAgIHN0YXRp
YyBjb25zdCBzaXplX3QganNDb25zdGFudFRhZyA9IDA7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBkb3VibGVDb25zdGFudFRhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbnQ1MkNv
bnN0YW50VGFnID0gMjsKKworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGFnTWFzayA9IDB4
MzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHBvaW50ZXJNYXNrID0gfnRhZ01hc2s7CisK
KyAgICBleHBsaWNpdCBMYXp5Tm9kZShOb2RlKiBub2RlID0gbnVsbHB0cikKKyAgICAgICAgOiBt
X25vZGUobm9kZSkKKyAgICAgICAgLCBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihudWxscHRyKSkKKyAgICB7CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgIHNldEZyb3plblZhbHVlKG5vZGUtPmNvbnN0YW50KCksIG5vZGUtPm9w
KCkpOworICAgIH0KKworICAgIGV4cGxpY2l0IExhenlOb2RlKEZyb3plblZhbHVlKiB2YWx1ZSwg
Tm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgICAgICA6IG1fbm9kZShudWxscHRyKQorICAg
ICAgICAsIG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG51bGxwdHIpKQorICAg
IHsKKyAgICAgICAgc2V0RnJvemVuVmFsdWUodmFsdWUsIG9wKTsKKyAgICB9CisKKyAgICBMYXp5
Tm9kZShzdGQ6Om51bGxwdHJfdCkKKyAgICAgICAgOiBtX25vZGUobnVsbHB0cikKKyAgICAgICAg
LCBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihudWxscHRyKSkKKyAgICB7Cisg
ICAgfQorCisgICAgTGF6eU5vZGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1fbm9kZShyZWludGVycHJldF9jYXN0PE5vZGUqPigtMSkpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV9ub2RlID0g
bm9kZTsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgc2V0RnJvemVuVmFsdWUobm9kZS0+Y29uc3RhbnQoKSwgbm9kZS0+b3AoKSk7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZSA9PSByZWludGVycHJldF9jYXN0PE5vZGUqPigtMSk7IH0KKworICAgIGJvb2wgaXNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisKKyAgICBOb2RlVHlwZSBvcCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9ub2RlKQorICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+b3AoKTsK
KworICAgICAgICBzd2l0Y2ggKG1fdmFsdWUgJiB0YWdNYXNrKSB7CisgICAgICAgIGNhc2UganND
b25zdGFudFRhZzoKKyAgICAgICAgICAgIHJldHVybiBKU0NvbnN0YW50OworICAgICAgICBjYXNl
IGRvdWJsZUNvbnN0YW50VGFnOgorICAgICAgICAgICAgcmV0dXJuIERvdWJsZUNvbnN0YW50Owor
ICAgICAgICBjYXNlIGludDUyQ29uc3RhbnRUYWc6CisgICAgICAgICAgICByZXR1cm4gSW50NTJD
b25zdGFudDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOb2RlKiBhc05vZGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbm9kZSB8fCAhYXNWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIG1fbm9kZTsKKyAgICB9CisKKyAgICBGcm96ZW5WYWx1ZSogYXNWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+KG1f
dmFsdWUgJiBwb2ludGVyTWFzayk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
UHRySGFzaDxGcm96ZW5WYWx1ZSo+OjpoYXNoKGFzVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBX
VEY6OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1fbm9kZSk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExhenlOb2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChh
c1ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwor
ICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9kZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgTGF6eU5vZGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIE5vZGUqIGVuc3VyZUlzTm9k
ZShJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVk
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9ub2RlKQorICAgICAgICAgICAgbV9u
b2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KG5vZGVJbmRleCwgYmxvY2stPmF0KG5v
ZGVJbmRleCktPm9yaWdpbiwgYXNWYWx1ZSgpLCBvcCgpKTsKKworICAgICAgICByZXR1cm4gYXNO
b2RlKCk7CisgICAgfQorCisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGFz
Tm9kZSgpOyB9CisKKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqYXNOb2Rl
KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWFzVmFsdWUoKSAm
JiAhYXNOb2RlKCk7IH0KKworICAgIHR5cGVkZWYgdm9pZCogKExhenlOb2RlOjoqVW5zcGVjaWZp
ZWRCb29sVHlwZSk7CisKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpcyA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVj
aWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRGcm96ZW5WYWx1ZShGcm96
ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVl
KTsKKyAgICAgICAgbV92YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7
CisgICAgICAgIEFTU0VSVChtX3ZhbHVlID09IChtX3ZhbHVlICYgcG9pbnRlck1hc2spKTsKKyAg
ICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAg
ICBtX3ZhbHVlIHw9IGpzQ29uc3RhbnRUYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIG1fdmFsdWUgfD0gZG91YmxlQ29uc3Rh
bnRUYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50Ogor
ICAgICAgICAgICAgbV92YWx1ZSB8PSBpbnQ1MkNvbnN0YW50VGFnOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOb2Rl
KiBtX25vZGU7CisgICAgdWludHB0cl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6Okxh
enlOb2RlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6TGF6eU5vZGU+IHsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdMYXp5Tm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDU0YmZiNTJlNmMyYzIxYzRlZGEwMGY1OTk3NTkw
NGY3NzEzYjEwODUuLjFjZDZiMDllZmYyZDJhZTQ1YTE0YjVjMDcwMGRjNWJmNmExMWQ5MDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZS5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gUHVyZVZhbHVl
IGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRo
aXMuCiAgICAgfQogICAgIAotICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9k
ZSogbm9kZSkKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlIG5v
ZGUpCiAgICAgewogICAgICAgICBpZiAobG9jYXRpb24ua2luZCgpICE9IFN0YWNrTG9jKQogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCBiODk3NDQwZGE5ZGM1OWY2M2ExNzI5NDk1
OTIwMzNlZTdiZGU4ZGUxLi5iZTViZDhmM2E5YTE2NGJiNjk1MTE2Y2E1NGQzOWJkMmQ4M2U4M2Rh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcApAQCAtMTA5LDggKzEwOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBl
SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTGF6eU5vZGUgc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc291cmNlLmlzTm9kZSgpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UuYXNOb2RlKCkgPT0gbm9kZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjMxLDggKzIzMywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Ug
PT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgTGF6eU5vZGUgc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc291cmNlLmlzTm9kZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UuYXNOb2RlKCkgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNDM2LDcgKzQ0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTm9kZSopIHsgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDMwMzBjMWNkYTFmNWNjZTgzYzRhYzMwMDExMGQ0MDI3NjFiMjg4NDUu
LjBhNjkyNTU5ZjYwNmY0Yjk5NTc2MWRiYjFhOGQ3ZTQxMDBiZjUzMjEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNS0wNS0yMiAgQmFzaWxlIENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWxsb3cgREZHQ2xvYmJlcml6ZSB0byByZXR1cm4gbm9uLW5vZGUg
Y29uc3RhbnRzIHRoYXQgbXVzdCBiZSBsYXRlciBjcmVhdGVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUyNzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NzZS1u
ZXctYXJyYXktYnVmZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvY3NlLW5ldy1hcnJheS5qczogQWRkZWQuCisgICAgICAgIChm
b28pOgorCiAyMDE1LTA1LTE0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+
CiAKICAgICAgICAgQVg6IFNlbGVjdCB0ZXh0IG1lY2hhbmlzbSByZXR1cm5zIHJlc3VsdHMgb3V0
c2lkZSBvZiB0ZXh0IGNvbnRyb2wgcmVnaW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvY3NlLW5ldy1hcnJheS1idWZmZXIuanMgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jc2UtbmV3LWFycmF5LWJ1ZmZlci5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xYzIwYmIyNmE4ZmZkY2RlZTg4ZTI5YmU1ZDlhMzViN2NiMDY3Y2ExCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3NlLW5ldy1hcnJh
eS1idWZmZXIuanMKQEAgLTAsMCArMSw4IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIGFy
cmF5ID0gWzEuNV07CisgICAgcmV0dXJuIE1hdGguY29zKE1hdGguc3FydChNYXRoLmFicyhNYXRo
LnNpbihhcnJheVswXSkgKiA1IC8gNC41KSkpICUgMy41OworfQorbm9JbmxpbmUoZm9vKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICBmb28oKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NzZS1uZXctYXJyYXkuanMgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jc2UtbmV3LWFycmF5LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVhZDQ3M2U4YTY2MjM1OTUyNzQyNzM4N2I2Zjk5MTYyOGI0NDA4OTIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jc2UtbmV3LWFy
cmF5LmpzCkBAIC0wLDAgKzEsOCBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAgICB2YXIgYXJyYXkg
PSBbMS41LCBwXTsKKyAgICByZXR1cm4gTWF0aC5jb3MoTWF0aC5zcXJ0KE1hdGguYWJzKE1hdGgu
c2luKGFycmF5WzBdKSAqIDUgLyA0LjUpKSkgJSAzLjU7Cit9Citub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgIGZvbygwKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>