<?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>66224</bug_id>
          
          <creation_ts>2011-08-15 07:34:11 -0700</creation_ts>
          <short_desc>Web Inspector: extract breakpoint management code to a helper class and add tests.</short_desc>
          <delta_ts>2011-08-19 23:31:03 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66623</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>aroben</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451062</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-15 07:34:11 -0700</bug_when>
    <thetext>Web Inspector: extract breakpoint management code to a helper class and add tests.

Our breakpoint management code is quite complex, why don&apos;t we move it to a separate class and add a set of unit tests for it?
The next step would be to dispatch breakpoint events on uiSourceCode objects directly and thus completely decouple breakpoint management code from the rest of presentation model&apos;s code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451063</commentid>
    <comment_count>1</comment_count>
      <attachid>103912</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-15 07:35:45 -0700</bug_when>
    <thetext>Created attachment 103912
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451066</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-15 07:41:09 -0700</bug_when>
    <thetext>For actually switching to BreakpointHelper in DebuggerPresentationModel see https://bugs.webkit.org/show_bug.cgi?id=66225.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451562</commentid>
    <comment_count>3</comment_count>
      <attachid>104028</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-16 05:23:36 -0700</bug_when>
    <thetext>Created attachment 104028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451563</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-16 05:24:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=104028) [details]
&gt; Patch

Split BreakpointHelper into 3 classes and cleanup the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452910</commentid>
    <comment_count>5</comment_count>
      <attachid>104028</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-18 01:56:58 -0700</bug_when>
    <thetext>Comment on attachment 104028
Patch

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

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:705
&gt; +WebInspector.BreakpointHelper = function(debuggerModel, breakpoints, breakpointAddedDelegate, breakpointRemovedDelegate)

Class with two inner classes deserves to be defined in a separate file.

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:720
&gt; +    registerUISourceCode: function(uiSourceCodeId, rawSourceCode, persistent)

Can we pass real instance here? Also, remove &lt;persist&gt;.
This could be called uiSourceCodeAdded

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:722
&gt; +        this._uiSourceCodeInfo[uiSourceCodeId] = { rawSourceCode: rawSourceCode, persistent: persistent };

This mapping should be bi-directional, should be defined in the RawSourceCode &lt;-&gt; UISourceCode terms.

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:745
&gt; +        this._uiBreakpoints.addBreakpoint(breakpoint);

Either pass all the parameters into addBreakpoint or define a class for a breakpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452961</commentid>
    <comment_count>6</comment_count>
      <attachid>104324</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-18 04:50:13 -0700</bug_when>
    <thetext>Created attachment 104324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453037</commentid>
    <comment_count>7</comment_count>
      <attachid>104324</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-18 07:45:16 -0700</bug_when>
    <thetext>Comment on attachment 104324
Patch

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

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:31
&gt; +WebInspector.BreakpointManager = function(debuggerModel, breakpoints, breakpointAddedDelegate, breakpointRemovedDelegate)

Please remove the breakpoints parameter and replace it with the &quot;setBreakpointsForTest&quot; method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453853</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-19 08:50:49 -0700</bug_when>
    <thetext>Committed r93415: &lt;http://trac.webkit.org/changeset/93415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454301</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-19 20:44:18 -0700</bug_when>
    <thetext>The test added by this patch (inspector/debugger/breakpoint-manager.html) is failing everywhere:
http://build.webkit.org/results/Windows%20XP%20Debug%20(Tests)/r93465%20(31415)/inspector/debugger/breakpoint-manager-pretty-diff.html
http://build.webkit.org/results/Qt%20Linux%20Release/r93416%20(36643)/inspector/debugger/breakpoint-manager-pretty-diff.html
http://build.webkit.org/results/SnowLeopard%20Intel%20Debug%20(Tests)/r93461%20(1777)/inspector/debugger/breakpoint-manager-pretty-diff.html

I don&apos;t even know on which platform this test passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454319</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-19 23:31:03 -0700</bug_when>
    <thetext>&gt; I don&apos;t even know on which platform this test passes.

I&apos;m rolling it now, sorry for trouble.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103912</attachid>
            <date>2011-08-15 07:35:45 -0700</date>
            <delta_ts>2011-08-16 05:23:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66224-20110815183543.patch</filename>
            <type>text/plain</type>
            <size>29459</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5NjMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzEwMDU3ODk4OGE0MGNmMTcwYTVm
ZDU3ZDg0YzQzMzQxN2U3YTNkLi5mYWJlMDM5YzlmYTY3N2EyOTMwOTA0ODY3NmYwN2YwNmQ1ZmUz
MjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTUgIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXh0cmFj
dCBicmVha3BvaW50IG1hbmFnZW1lbnQgY29kZSB0byBhIGhlbHBlciBjbGFzcyBhbmQgYWRkIHRl
c3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYy
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9kZWwtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcHJlc2VudGF0
aW9uLW1vZGVsLmh0bWw6IEFkZGVkLgorCiAyMDExLTA4LTEyICBZdXJ5IFNlbWlraGF0c2t5ICA8
eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4cGFuZCBleGNl
cHRpb24gcHJvcGVydGllcyB3aGVuIHdyYXBwaW5nIGl0IGFzIG9iamVjdC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9k
ZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2Vy
LXByZXNlbnRhdGlvbi1tb2RlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI2ZTBhZGZiZTVj
NDBjOTA3ZWMyZGI0N2M0ZjA3ZTkxMzhjNDdhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9kZWwtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNjUgQEAKK1Rlc3RzIERlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwg
Y2xhc3MuCisKKworUnVubmluZzogcmVnaXN0ZXJVSVNvdXJjZUNvZGUKK2RlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiticmVha3BvaW50QWRkZWQoYS5qcywgMTAsIGZvbyA9
PSBiYXIsIHRydWUpCiticmVha3BvaW50QWRkZWQoYS5qcywgMjAsICwgZmFsc2UpCisKK1J1bm5p
bmc6IGNoYW5nZUJyZWFrcG9pbnRzCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYS5qczoz
MDowKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDMwLCAsIHRydWUpCiticmVha3BvaW50UmVtb3Zl
ZChhLmpzLCAzMCkKK2RlYnVnZ2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChhLmpzOjEwOjApCiti
cmVha3BvaW50UmVtb3ZlZChhLmpzLCAxMCkKK2JyZWFrcG9pbnRSZW1vdmVkKGEuanMsIDIwKQor
ZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGEuanM6MzA6MCkKKworUnVubmluZzogc2V0
QnJlYWtwb2ludE9uQ29tbWVudAorZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTU6
MCkKK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAxNSwgLCB0cnVlKQorYnJlYWtwb2ludFJlbW92ZWQo
YS5qcywgMTUpCiticmVha3BvaW50QWRkZWQoYS5qcywgMTYsICwgdHJ1ZSkKKworUnVubmluZzog
c2V0QnJlYWtwb2ludE91dHNpZGVPZlNjcmlwdAorZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50
KGEuanM6MTU6MCkKK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAxNSwgLCB0cnVlKQorCitSdW5uaW5n
OiB0ZXN0TmF2aWdhdGlvbgorZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkK
K2JyZWFrcG9pbnRBZGRlZChhLmpzLCAxMCwgZm9vID09IGJhciwgdHJ1ZSkKK2JyZWFrcG9pbnRB
ZGRlZChhLmpzLCAyMCwgLCBmYWxzZSkKKworTmF2aWdhdGUgdG8gQi4KK2RlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludChiLmpzOjM6MCkKK2JyZWFrcG9pbnRBZGRlZChiLmpzLCAzLCAsIHRydWUp
CisKK05hdmlnYXRlIGJhY2sgdG8gQS4KK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAxMCwgZm9vID09
IGJhciwgdHJ1ZSkKK2JyZWFrcG9pbnRSZW1vdmVkKGEuanMsIDEwKQorYnJlYWtwb2ludEFkZGVk
KGEuanMsIDExLCBmb28gPT0gYmFyLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAs
IGZhbHNlKQorU2VyaWFsaXplZCBicmVha3BvaW50czogW3sic291cmNlRmlsZUlkIjoiYS5qcyIs
ImxpbmVOdW1iZXIiOjExLCJjb25kaXRpb24iOiJmb28gPT0gYmFyIiwiZW5hYmxlZCI6dHJ1ZX0s
eyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MjAsImNvbmRpdGlvbiI6IiIsImVu
YWJsZWQiOmZhbHNlfSx7InNvdXJjZUZpbGVJZCI6ImIuanMiLCJsaW5lTnVtYmVyIjozLCJjb25k
aXRpb24iOiIiLCJlbmFibGVkIjp0cnVlfV0KKworUnVubmluZzogdGVzdEZvcm1hdHRpbmcKK2Rl
YnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpzOjQ6MCkKK2JyZWFrcG9pbnRBZGRlZChjLmpz
LCA0LCAsIHRydWUpCitbeyJzb3VyY2VGaWxlSWQiOiJjLmpzIiwibGluZU51bWJlciI6NCwiY29u
ZGl0aW9uIjoiIiwiZW5hYmxlZCI6dHJ1ZX1dCisKK0Zvcm1hdCBzb3VyY2UuCitkZWJ1Z2dlck1v
ZGVsLnJlbW92ZUJyZWFrcG9pbnQoYy5qczo0OjApCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9p
bnQoYy5qczoyOjApCiticmVha3BvaW50QWRkZWQoZm9ybWF0dGVkX2MuanMsIDQsICwgdHJ1ZSkK
K2JyZWFrcG9pbnRBZGRlZChmb3JtYXR0ZWRfYy5qcywgOCwgLCBmYWxzZSkKKworQ2hhbmdlIGJy
ZWFrcG9pbnRzLgorYnJlYWtwb2ludFJlbW92ZWQoZm9ybWF0dGVkX2MuanMsIDgpCitkZWJ1Z2dl
ck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczo2OjApCiticmVha3BvaW50QWRkZWQoZm9ybWF0dGVk
X2MuanMsIDEyLCAsIHRydWUpCisKK1JlbG9hZC4KK2JyZWFrcG9pbnRBZGRlZChmb3JtYXR0ZWRf
Yy5qcywgNCwgLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGZvcm1hdHRlZF9jLmpzLCAxMiwgLCB0
cnVlKQorYnJlYWtwb2ludFJlbW92ZWQoZm9ybWF0dGVkX2MuanMsIDQpCiticmVha3BvaW50QWRk
ZWQoZm9ybWF0dGVkX2MuanMsIDYsICwgdHJ1ZSkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXByZXNlbnRhdGlvbi1tb2RlbC5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXByZXNlbnRhdGlvbi1tb2RlbC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQxNzY4MTEyZWFhOGRiYWRhNjk3ODVhMmU2OTc4YmU1MTE3ZDZiY2QK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdn
ZXItcHJlc2VudGF0aW9uLW1vZGVsLmh0bWwKQEAgLTAsMCArMSwyNzUgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2
YXIgZGVidWdnZXJCcmVha3BvaW50cyA9IHt9OworICAgIHZhciBkZWJ1Z2dlck1vZGVsID0gewor
ICAgICAgICBzZXRCcmVha3BvaW50QnlTY3JpcHRMb2NhdGlvbjogZnVuY3Rpb24obG9jYXRpb24s
IGNvbmRpdGlvbiwgY2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBicmVha3Bv
aW50SWQgPSBsb2NhdGlvbi5zY3JpcHRJZCArICI6IiArIGxvY2F0aW9uLmxpbmVOdW1iZXIgKyAi
OiIgKyBsb2NhdGlvbi5jb2x1bW5OdW1iZXI7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KCIgKyBicmVha3BvaW50SWQgKyAi
KSIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEoYnJlYWtwb2ludElk
IGluIGRlYnVnZ2VyQnJlYWtwb2ludHMpKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyQnJlYWtwb2lu
dHNbYnJlYWtwb2ludElkXSA9IGNvbmRpdGlvbjsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbnMg
PSBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9ucyA/IGRlYnVnZ2VyTW9kZWwuYWN0dWFsTG9j
YXRpb25zIDogW2xvY2F0aW9uXTsKKyAgICAgICAgICAgIGRlbGV0ZSBkZWJ1Z2dlck1vZGVsLmFj
dHVhbExvY2F0aW9uczsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxi
YWNrKGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKTsgfSwgMCk7CisgICAgICAgIH0sCisgICAgICAg
IHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImRlYnVnZ2VyTW9kZWwucmVtb3ZlQnJl
YWtwb2ludCgiICsgYnJlYWtwb2ludElkICsgIikiKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYXNzZXJ0VHJ1ZShicmVha3BvaW50SWQgaW4gZGVidWdnZXJCcmVha3BvaW50cyk7CisgICAg
ICAgICAgICBkZWxldGUgZGVidWdnZXJCcmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgICAg
ICB9CisgICAgfTsKKyAgICBkZWJ1Z2dlck1vZGVsLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlOworCisgICAgdmFyIHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICBmdW5j
dGlvbiBicmVha3BvaW50QWRkZWQodWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXIsIGNvbmRpdGlv
biwgZW5hYmxlZCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJicmVh
a3BvaW50QWRkZWQoIiArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAiLCAi
KSArICIpIik7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB1aVNvdXJjZUNvZGVJZCArICI6
IiArIGxpbmVOdW1iZXI7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSghKGJyZWFr
cG9pbnRJZCBpbiB1aUJyZWFrcG9pbnRzKSk7CisgICAgICAgIHVpQnJlYWtwb2ludHNbYnJlYWtw
b2ludElkXSA9IGNvbmRpdGlvbiArICJ8IiArIGVuYWJsZWQ7CisgICAgfQorICAgIGZ1bmN0aW9u
IGJyZWFrcG9pbnRSZW1vdmVkKHVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImJyZWFrcG9pbnRSZW1vdmVkKCIgKyBBcnJh
eS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgIiwgIikgKyAiKSIpOworICAgICAgICB2
YXIgYnJlYWtwb2ludElkID0gdWlTb3VyY2VDb2RlSWQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoYnJlYWtwb2ludElkIGluIHVpQnJlYWtwb2lu
dHMpOworICAgICAgICBkZWxldGUgdWlCcmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnQodWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiB7IHNvdXJjZUZp
bGVJZDogdWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNvbmRpdGlvbjog
Y29uZGl0aW9uLCBlbmFibGVkOiBlbmFibGVkIH07CisgICAgfQorICAgIHZhciBzZXJpYWxpemVk
QnJlYWtwb2ludHMgPSBbXTsKKyAgICBzZXJpYWxpemVkQnJlYWtwb2ludHMucHVzaChjcmVhdGVC
cmVha3BvaW50KCJhLmpzIiwgMTAsICJmb28gPT0gYmFyIiwgdHJ1ZSkpOworICAgIHNlcmlhbGl6
ZWRCcmVha3BvaW50cy5wdXNoKGNyZWF0ZUJyZWFrcG9pbnQoImEuanMiLCAyMCwgIiIsIGZhbHNl
KSk7CisgICAgc2VyaWFsaXplZEJyZWFrcG9pbnRzLnB1c2goY3JlYXRlQnJlYWtwb2ludCgiYi5q
cyIsIDMsICIiLCB0cnVlKSk7CisgICAgdmFyIGJyZWFrcG9pbnRIZWxwZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIoZGVidWdnZXJNb2RlbCwgc2VyaWFsaXplZEJyZWFrcG9p
bnRzLCBicmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRSZW1vdmVkKTsKKyAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydEVxdWFscyhKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkQnJlYWtwb2ludHMpLCBK
U09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkpKTsK
KworICAgIHZhciByYXdTb3VyY2VDb2RlQSA9IHsKKyAgICAgICAgcmF3TG9jYXRpb25Ub1VJTG9j
YXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKSB7IHJldHVybiByYXdMb2NhdGlvbjsgfSwKKyAg
ICAgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlcikgeyByZXR1cm4geyBzY3JpcHRJZDogImEuanMiLCBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OyB9CisgICAgfTsKKyAgICB2YXIgcmF3
U291cmNlQ29kZUIgPSB7CisgICAgICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlv
bihyYXdMb2NhdGlvbikgeyByZXR1cm4gcmF3TG9jYXRpb247IH0sCisgICAgICAgIHVpTG9jYXRp
b25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpIHsgcmV0
dXJuIHsgc2NyaXB0SWQ6ICJiLmpzIiwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVt
YmVyOiBjb2x1bW5OdW1iZXIgfTsgfQorICAgIH07CisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1blRl
c3RTdWl0ZShbCisgICAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyVUlTb3VyY2VDb2RlKG5leHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxwZXIucmVnaXN0ZXJVSVNvdXJjZUNv
ZGUoImEuanMiLCByYXdTb3VyY2VDb2RlQSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0
KGNoZWNrUmVzdWx0cywgMCk7CisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTAiOiJm
b28gPT0gYmFyfHRydWUiLCJhLmpzOjIwIjoifGZhbHNlIn0sIHVpQnJlYWtwb2ludHMpOworICAg
ICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTA6MCI6ICJmb28gPT0gYmFyIn0sIGRl
YnVnZ2VyQnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
RXF1YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5n
aWZ5KGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworICAgICAgICAg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmdW5j
dGlvbiBjaGFuZ2VCcmVha3BvaW50cyhuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBicmVh
a3BvaW50SGVscGVyLnNldEJyZWFrcG9pbnQoImEuanMiLCAzMCwgIiIsIHRydWUpOworICAgICAg
ICAgICAgLy8gUmVtb3ZlIGJyZWFrcG9pbnQgaW1tZWRpYXRlbHksIGJyZWFrcG9pbnQgc2hvdWxk
IGJlIHJlbW92ZWQgY29ycmVjdGx5IGZyb20gYm90aCBkZWJ1Z2dlciBtb2RlbCBhbmQgVUkuCisg
ICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlbW92ZUJyZWFrcG9pbnQoImEuanMiLCAzMCk7
CisKKyAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxwZXIucmVtb3ZlQnJlYWtwb2ludCgiYS5qcyIs
IDEwKTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxwZXIucmVtb3ZlQnJlYWtwb2ludCgiYS5q
cyIsIDIwKTsKKworICAgICAgICAgICAgc2V0VGltZW91dChjaGVja1Jlc3VsdHMsIDApOworICAg
ICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnRFcXVhbHMoe30sIHVpQnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAg
IGFzc2VydEVxdWFscyh7fSwgZGVidWdnZXJCcmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0RXF1YWxzKFt7InNvdXJjZUZpbGVJZCI6ImIuanMiLCJsaW5lTnVtYmVyIjozLCJjb25k
aXRpb24iOiIiLCJlbmFibGVkIjp0cnVlfV0sIGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXplQnJl
YWtwb2ludHMoKSk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorCisgICAgICAgIGZ1bmN0aW9uIHNldEJyZWFrcG9pbnRPbkNvbW1lbnQobmV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRIZWxwZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIoZGVidWdnZXJNb2RlbCwgW10sIGJyZWFrcG9pbnRBZGRl
ZCwgYnJlYWtwb2ludFJlbW92ZWQpOworICAgICAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9Owor
ICAgICAgICAgICAgZGVidWdnZXJCcmVha3BvaW50cyA9IHt9OworCisgICAgICAgICAgICBicmVh
a3BvaW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpzIiwgcmF3U291cmNlQ29kZUEs
IHRydWUpOworCisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9ucyA9IFt7
IGxpbmVOdW1iZXI6IDE2LCBjb2x1bW5OdW1iZXI6IDAgfV07CisgICAgICAgICAgICBicmVha3Bv
aW50SGVscGVyLnNldEJyZWFrcG9pbnQoImEuanMiLCAxNSwgIiIsIHRydWUpOworICAgICAgICAg
ICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoxNSI6Inx0cnVlIn0sIHVpQnJlYWtwb2ludHMpOworICAg
ICAgICAgICAgc2V0VGltZW91dChjaGVja1Jlc3VsdHMsIDApOworICAgICAgICAgICAgZnVuY3Rp
b24gY2hlY2tSZXN1bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRF
cXVhbHMoeyJhLmpzOjE2IjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CisgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoJ1t7InNvdXJjZUZpbGVJZCI6ImEuanMiLCJs
aW5lTnVtYmVyIjoxNiwiY29uZGl0aW9uIjoiIiwiZW5hYmxlZCI6dHJ1ZX1dJywgSlNPTi5zdHJp
bmdpZnkoYnJlYWtwb2ludEhlbHBlci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisgICAgICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGZ1
bmN0aW9uIHNldEJyZWFrcG9pbnRPdXRzaWRlT2ZTY3JpcHQobmV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnRIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRIZWxwZXIoZGVidWdnZXJNb2RlbCwgW10sIGJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludFJl
bW92ZWQpOworICAgICAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9OworICAgICAgICAgICAgZGVi
dWdnZXJCcmVha3BvaW50cyA9IHt9OworCisgICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJl
Z2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpzIiwgcmF3U291cmNlQ29kZUEsIHRydWUpOworCisgICAg
ICAgICAgICBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9ucyA9IFtdOworICAgICAgICAgICAg
YnJlYWtwb2ludEhlbHBlci5zZXRCcmVha3BvaW50KCJhLmpzIiwgMTUsICIiLCB0cnVlKTsKKyAg
ICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTUiOiJ8dHJ1ZSJ9LCB1aUJyZWFrcG9pbnRz
KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXN1bHRzLCAwKTsKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGNoZWNrUmVzdWx0cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0RXF1YWxzKHsiYS5qczoxNSI6Inx0cnVlIn0sIHVpQnJlYWtwb2ludHMpOworICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCdbeyJzb3VyY2VGaWxlSWQiOiJh
LmpzIiwibGluZU51bWJlciI6MTUsImNvbmRpdGlvbiI6IiIsImVuYWJsZWQiOnRydWV9XScsIEpT
T04uc3RyaW5naWZ5KGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOwor
ICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0TmF2aWdhdGlvbihuZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgYnJlYWtwb2ludEhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBl
cihkZWJ1Z2dlck1vZGVsLCBzZXJpYWxpemVkQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRBZGRlZCwg
YnJlYWtwb2ludFJlbW92ZWQpOworICAgICAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9OworICAg
ICAgICAgICAgZGVidWdnZXJCcmVha3BvaW50cyA9IHt9OworCisgICAgICAgICAgICBicmVha3Bv
aW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpzIiwgcmF3U291cmNlQ29kZUEsIHRy
dWUpOworICAgICAgICAgICAgc2V0VGltZW91dChuYXZpZ2F0ZVRvQiwgMCk7CisKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIG5hdmlnYXRlVG9CKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwIjoiZm9vID09IGJhcnx0cnVlIiwiYS5qczoyMCI6Inxm
YWxzZSJ9LCB1aUJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJh
LmpzOjEwOjAiOiJmb28gPT0gYmFyIn0sIGRlYnVnZ2VyQnJlYWtwb2ludHMpOworICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6
ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXpl
QnJlYWtwb2ludHMoKSkpOworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIlxuTmF2aWdhdGUgdG8gQi4iKTsKKyAgICAgICAgICAgICAgICB1aUJyZWFrcG9pbnRzID0g
e307CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5kZWJ1Z2dlclJlc2V0KCk7CisK
KyAgICAgICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJi
LmpzIiwgcmF3U291cmNlQ29kZUIsIHRydWUpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
bmF2aWdhdGVUb0EsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBu
YXZpZ2F0ZVRvQSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxz
KHsiYi5qczozIjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0RXF1YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0sIGRlYnVn
Z2VyQnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1
YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5naWZ5
KGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworCisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlxuTmF2aWdhdGUgYmFjayB0byBBLiIpOwor
ICAgICAgICAgICAgICAgIHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgICAgICBicmVh
a3BvaW50SGVscGVyLmRlYnVnZ2VyUmVzZXQoKTsKKworICAgICAgICAgICAgICAgIHZhciBldmVu
dERhdGEgPSB7IGJyZWFrcG9pbnRJZDogImEuanM6MTA6MCIsIGxvY2F0aW9uOiB7IHNjcmlwdElk
OiAiYS5qcyIsIGxpbmVOdW1iZXI6IDExLCBjb2x1bW5OdW1iZXI6IDUgfX07CisgICAgICAgICAg
ICAgICAgZGVidWdnZXJNb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgZXZlbnREYXRhKTsKKyAg
ICAgICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpz
IiwgcmF3U291cmNlQ29kZUEsIHRydWUpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hl
Y2tSZXN1bHRzLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2hl
Y2tSZXN1bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMo
eyJhLmpzOjExIjoiZm9vID09IGJhcnx0cnVlIiwiYS5qczoyMCI6InxmYWxzZSJ9LCB1aUJyZWFr
cG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwOjAiOiJmb28g
PT0gYmFyIiwiYi5qczozOjAiOiIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNlcmlhbGl6ZWQgYnJlYWtwb2ludHM6ICIg
KyBKU09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkp
KTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdEZvcm1hdHRpbmcobmV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnRIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRI
ZWxwZXIoZGVidWdnZXJNb2RlbCwgW2NyZWF0ZUJyZWFrcG9pbnQoImMuanMiLCA0LCAiIiwgdHJ1
ZSldLCBicmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRSZW1vdmVkKTsKKyAgICAgICAgICAgIHVp
QnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgIGRlYnVnZ2VyQnJlYWtwb2ludHMgPSB7fTsK
KworICAgICAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGVDID0geworICAgICAgICAgICAgICAgIHJh
d0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikgeyByZXR1cm4gcmF3
TG9jYXRpb247IH0sCisgICAgICAgICAgICAgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikgeyByZXR1cm4geyBzY3JpcHRJZDogImMu
anMiLCBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9
OyB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGVDRm9ybWF0
dGVkID0geworICAgICAgICAgICAgICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlv
bihyYXdMb2NhdGlvbikgeyByZXR1cm4geyBsaW5lTnVtYmVyOiByYXdMb2NhdGlvbi5saW5lTnVt
YmVyICogMiwgY29sdW1uTnVtYmVyOiByYXdMb2NhdGlvbi5jb2x1bW5OdW1iZXIgKiAyIH07IH0s
CisgICAgICAgICAgICAgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcikgeyByZXR1cm4geyBzY3JpcHRJZDogImMuanMiLCBsaW5lTnVt
YmVyOiBNYXRoLmZsb29yKGxpbmVOdW1iZXIgLyAyKSwgY29sdW1uTnVtYmVyOiBNYXRoLmZsb29y
KGNvbHVtbk51bWJlciAvIDIpIH07IH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGJy
ZWFrcG9pbnRIZWxwZXIucmVnaXN0ZXJVSVNvdXJjZUNvZGUoImMuanMiLCByYXdTb3VyY2VDb2Rl
QywgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZvcm1hdCwgMCk7CisKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGZvcm1hdCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0RXF1YWxzKHsiYy5qczo0IjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0RXF1YWxzKHsiYy5qczo0OjAiOiIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoSlNPTi5zdHJpbmdpZnko
YnJlYWtwb2ludEhlbHBlci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiXG5Gb3JtYXQgc291cmNlLiIpOworICAgICAg
ICAgICAgICAgIHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50
SGVscGVyLnJlbW92ZUFsbEJyZWFrcG9pbnRzRnJvbURlYnVnZ2VyKCk7CisKKyAgICAgICAgICAg
ICAgICBicmVha3BvaW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJmb3JtYXR0ZWRfYy5q
cyIsIHJhd1NvdXJjZUNvZGVDRm9ybWF0dGVkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVh
a3BvaW50SGVscGVyLnNldEJyZWFrcG9pbnQoImZvcm1hdHRlZF9jLmpzIiwgNCwgIiIsIHRydWUp
OworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxwZXIuc2V0QnJlYWtwb2ludCgiZm9ybWF0
dGVkX2MuanMiLCA4LCAiIiwgZmFsc2UpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hh
bmdlQnJlYWtwb2ludHMsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlv
biBjaGFuZ2VCcmVha3BvaW50cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0RXF1YWxzKHsiZm9ybWF0dGVkX2MuanM6NCI6Inx0cnVlIiwiZm9ybWF0dGVkX2MuanM6OCI6
InxmYWxzZSJ9LCB1aUJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMo
eyJjLmpzOjI6MCI6IiJ9LCBkZWJ1Z2dlckJyZWFrcG9pbnRzKTsKKworICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcbkNoYW5nZSBicmVha3BvaW50cy4iKTsKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlbW92ZUJyZWFrcG9pbnQoImZvcm1hdHRlZF9j
LmpzIiwgOCk7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5zZXRCcmVha3BvaW50
KCJmb3JtYXR0ZWRfYy5qcyIsIDEyLCAiIiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChyZWxvYWQsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBy
ZWxvYWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImZv
cm1hdHRlZF9jLmpzOjQiOiJ8dHJ1ZSIsImZvcm1hdHRlZF9jLmpzOjEyIjoifHRydWUifSwgdWlC
cmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYy5qczoyOjAiOiIi
LCJjLmpzOjY6MCI6IiJ9LCBkZWJ1Z2dlckJyZWFrcG9pbnRzKTsKKworICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcblJlbG9hZC4iKTsKKyAgICAgICAgICAgICAgICB1
aUJyZWFrcG9pbnRzID0ge307CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5kZWJ1
Z2dlclJlc2V0KCk7CisKKyAgICAgICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlZ2lzdGVy
VUlTb3VyY2VDb2RlKCJmb3JtYXR0ZWRfYy5qcyIsIHJhd1NvdXJjZUNvZGVDRm9ybWF0dGVkLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICB2YXIgZXZlbnREYXRhID0geyBicmVha3BvaW50SWQ6ICJj
LmpzOjI6MCIsIGxvY2F0aW9uOiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IDMsIGNv
bHVtbk51bWJlcjogMCB9fTsKKyAgICAgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtw
b2ludFJlc29sdmVkLCBldmVudERhdGEpOworICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IHsg
YnJlYWtwb2ludElkOiAiYy5qczo2OjAiLCBsb2NhdGlvbjogeyBzY3JpcHRJZDogImMuanMiLCBs
aW5lTnVtYmVyOiA2LCBjb2x1bW5OdW1iZXI6IDAgfX07CisgICAgICAgICAgICAgICAgZGVidWdn
ZXJNb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgZXZlbnREYXRhKTsKKyAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGNoZWNrUmVzdWx0cywgMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0RXF1YWxzKHsiZm9ybWF0dGVkX2MuanM6NiI6Inx0cnVlIiwiZm9ybWF0dGVkX2Mu
anM6MTIiOiJ8dHJ1ZSJ9LCB1aUJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRF
cXVhbHMoeyJjLmpzOjI6MCI6IiIsImMuanM6NjowIjoiIn0sIGRlYnVnZ2VyQnJlYWtwb2ludHMp
OworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IF0pOworCisgICAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKG1hcDEsIG1hcDIpCisgICAgeworICAg
ICAgICBmb3IgKHZhciBwIGluIG1hcDEpCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dFRydWUocCBpbiBtYXAyLCBwICsgIiBub3QgaW4gbWFwMiIpOworICAgICAgICBmb3IgKHZhciBw
IGluIG1hcDIpCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUocCBpbiBtYXAx
LCBwICsgIiBub3QgaW4gbWFwMSIpOworICAgIH0KK307CisKKzwvc2NyaXB0PgorCis8L2hlYWQ+
CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3RzIERlYnVnZ2VyUHJlc2VudGF0
aW9uTW9kZWwgY2xhc3MuPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWZl
ZDQ1NjhmZTQyMGRkZGY3ZDU0ZGVkNDM4YWQ0ODc1NWIzMGExNS4uYjc1YTlkNDEzMDhiMjQyN2Y5
NzAyNmNlY2JhODdiNWYzM2E2MjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEx
LTA4LTE1ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgYnJlYWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8g
YSBoZWxwZXIgY2xhc3MgYW5kIGFkZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXBy
ZXNlbnRhdGlvbi1tb2RlbC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90
b3R5cGUuc2V0QnJlYWtwb2ludEJ5U2NyaXB0TG9jYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50SGVscGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50SGVscGVyLnByb3RvdHlwZS5yZWdpc3RlclVJU291cmNlQ29kZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JVSVNvdXJj
ZUNvZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBl
LnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIu
cHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRIZWxwZXIucHJvdG90eXBlLl9jcmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50SGVscGVyLnByb3RvdHlwZS5fZGVsZXRlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX3NldEJyZWFr
cG9pbnRJbkRlYnVnZ2VyLmRpZFNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLl9zZXRCcmVha3BvaW50SW5EZWJ1Z2dlcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX3JlbW92ZUJy
ZWFrcG9pbnRGcm9tRGVidWdnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRI
ZWxwZXIucHJvdG90eXBlLl9iaW5kRGVidWdnZXJJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX3VuYmluZERlYnVnZ2VySWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLl9icmVha3BvaW50UmVzb2x2
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLl91
cGRhdGVCcmVha3BvaW50TG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRIZWxwZXIucHJvdG90eXBlLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50SGVscGVyLnByb3RvdHlwZS5yZW1vdmVBbGxCcmVha3BvaW50c0Zy
b21EZWJ1Z2dlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90
b3R5cGUuZGVidWdnZXJSZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhl
bHBlci5wcm90b3R5cGUuX2ZpbmRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50SGVscGVyLnByb3RvdHlwZS5fZm9yRWFjaEJyZWFrcG9pbnQpOgorCiAyMDExLTA4
LTEyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQ6IGZvbGxvdyB1cCB0byBpbnNwZWN0b3IgdGVzdCBicmVha2FnZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcwppbmRl
eCA3YTUyYjkxZDQ4MWNkODZmODM4ZWIxZmRhMDMzNDVjMDNkYTZlMjlkLi4xZDk3ZTZlMWEyZmUw
ZDEwMmZmOWE2OTBmYTcwN2I5Njg3MzM3OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC03Myw2ICs3MywxNSBAQCBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIERlYnVnZ2Vy
QWdlbnQuY29udGludWVUb0xvY2F0aW9uKGxvY2F0aW9uKTsKICAgICB9LAogCisgICAgc2V0QnJl
YWtwb2ludEJ5U2NyaXB0TG9jYXRpb246IGZ1bmN0aW9uKGxvY2F0aW9uLCBjb25kaXRpb24sIGNh
bGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuc2NyaXB0Rm9yU291cmNl
SUQobG9jYXRpb24uc2NyaXB0SWQpOworICAgICAgICBpZiAoc2NyaXB0LnNvdXJjZVVSTCkKKyAg
ICAgICAgICAgIHRoaXMuc2V0QnJlYWtwb2ludChzY3JpcHQuc291cmNlVVJMLCBsb2NhdGlvbi5s
aW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJhY2spOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLnNldEJyZWFrcG9pbnRCeVNvdXJjZUlkKGxv
Y2F0aW9uLCBjb25kaXRpb24sIGNhbGxiYWNrKTsKKyAgICB9LAorCiAgICAgc2V0QnJlYWtwb2lu
dDogZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgY2Fs
bGJhY2spCiAgICAgewogICAgICAgICAvLyBBZGp1c3QgY29sdW1uIGlmIG5lZWRlZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50
YXRpb25Nb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5qcwppbmRleCAxMTczYTgwMzIwZGQxMzQyNmU3MjVkYTkyM2Ez
MTljMzkwYTU1YjE1Li5jZjQ2ZjAzZTIxZWY1MTQyMjZhNDg1ZGQwOGY1MTE1Yjc1ZThjNDVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJl
c2VudGF0aW9uTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpzCkBAIC03MDIsNiArNzAyLDIyMSBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAKIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRI
ZWxwZXIgPSBmdW5jdGlvbihkZWJ1Z2dlck1vZGVsLCBicmVha3BvaW50cywgYnJlYWtwb2ludEFk
ZGVkRGVsZWdhdGUsIGJyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUpCit7CisgICAgdGhpcy5fZGVi
dWdnZXJNb2RlbCA9IGRlYnVnZ2VyTW9kZWw7CisgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkRGVs
ZWdhdGUgPSBicmVha3BvaW50QWRkZWREZWxlZ2F0ZTsKKyAgICB0aGlzLl9icmVha3BvaW50UmVt
b3ZlZERlbGVnYXRlID0gYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZQorCisgICAgdGhpcy5fYnJl
YWtwb2ludHMgPSB7fTsKKyAgICB0aGlzLl9icmVha3BvaW50c0J5RGVidWdnZXJJZCA9IHt9Owor
ICAgIHRoaXMuX3VpU291cmNlQ29kZUluZm8gPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBi
cmVha3BvaW50c1tpXTsKKyAgICAgICAgaWYgKCF0aGlzLl9maW5kQnJlYWtwb2ludChicmVha3Bv
aW50LnNvdXJjZUZpbGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKSkKKyAgICAgICAgICAgIHRo
aXMuX2NyZWF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VGaWxlSWQsIGJyZWFrcG9pbnQu
bGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCwgdHJ1
ZSk7CisgICAgfQorCisgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIHRoaXMu
X2JyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcyk7Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50
SGVscGVyLnByb3RvdHlwZSA9IHsKKyAgICByZWdpc3RlclVJU291cmNlQ29kZTogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlSWQsIHJhd1NvdXJjZUNvZGUsIHBlcnNpc3RlbnQpCisgICAgeworICAgICAg
ICB0aGlzLl91aVNvdXJjZUNvZGVJbmZvW3VpU291cmNlQ29kZUlkXSA9IHsgcmF3U291cmNlQ29k
ZTogcmF3U291cmNlQ29kZSwgcGVyc2lzdGVudDogcGVyc2lzdGVudCB9OworICAgICAgICB2YXIg
YnJlYWtwb2ludHMgPSB0aGlzLmJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlKHVpU291cmNlQ29k
ZUlkKTsKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVha3BvaW50cykgeworICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAgICAg
ICAgICAgIGlmICghYnJlYWtwb2ludC5yYXdMb2NhdGlvbikgeworICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnQucmF3TG9jYXRpb24gPSByYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0
aW9uKGJyZWFrcG9pbnQubGluZU51bWJlciwgMCk7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0
QnJlYWtwb2ludEluRGVidWdnZXIoYnJlYWtwb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9icmVha3BvaW50QWRkZWREZWxlZ2F0ZShicmVha3BvaW50LnVpU291cmNlQ29k
ZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBicmVha3Bv
aW50LmVuYWJsZWQpOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZGVidWdnZXJMb2NhdGlv
bikKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50TG9jYXRpb24oYnJlYWtw
b2ludCwgYnJlYWtwb2ludC5kZWJ1Z2dlckxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBicmVha3BvaW50c0ZvclVJU291cmNlQ29kZTogZnVuY3Rpb24odWlTb3VyY2VDb2RlSWQp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzW3VpU291cmNlQ29kZUlkXSkK
KyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW3VpU291cmNlQ29kZUlkXSA9IHt9OworICAg
ICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbdWlTb3VyY2VDb2RlSWRdOworICAgIH0sCisK
KyAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlciwg
Y29uZGl0aW9uLCBlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2ZpbmRCcmVha3Bv
aW50KHVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IHRoaXMuX3VpU291cmNlQ29kZUluZm9bdWlTb3Vy
Y2VDb2RlSWRdLnJhd1NvdXJjZUNvZGU7CisgICAgICAgIHZhciBwZXJzaXN0ZW50ID0gdGhpcy5f
dWlTb3VyY2VDb2RlSW5mb1t1aVNvdXJjZUNvZGVJZF0ucGVyc2lzdGVudDsKKworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnQodWlTb3VyY2VDb2RlSWQsIGxp
bmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgcGVyc2lzdGVudCk7CisgICAgICAgIGJyZWFr
cG9pbnQucmF3TG9jYXRpb24gPSByYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9u
KGxpbmVOdW1iZXIsIDApOworICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50SW5EZWJ1Z2dlcihi
cmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkRGVsZWdhdGUoYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyLCBicmVha3BvaW50LmNv
bmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQnJlYWtw
b2ludDogZnVuY3Rpb24odWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXIpCisgICAgeworICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KHVpU291cmNlQ29kZUlkLCBs
aW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbURlYnVnZ2VyKGJyZWFrcG9pbnQp
OworICAgICAgICB0aGlzLl9kZWxldGVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0
aGlzLl9icmVha3BvaW50UmVtb3ZlZERlbGVnYXRlKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQs
IGJyZWFrcG9pbnQubGluZU51bWJlcik7CisgICAgfSwKKworICAgIF9jcmVhdGVCcmVha3BvaW50
OiBmdW5jdGlvbih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVk
LCBwZXJzaXN0ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB7IHVpU291cmNl
Q29kZUlkOiB1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29uZGl0aW9u
OiBjb25kaXRpb24sIGVuYWJsZWQ6IGVuYWJsZWQsIHBlcnNpc3RlbnQ6IHBlcnNpc3RlbnQgfTsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX2ZpbmRCcmVha3BvaW50KGJyZWFrcG9pbnQu
dWlTb3VyY2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpOworICAgICAgICB0aGlzLmJy
ZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQpW2JyZWFr
cG9pbnQubGluZU51bWJlcl0gPSBicmVha3BvaW50OworICAgICAgICByZXR1cm4gYnJlYWtwb2lu
dDsKKyAgICB9LAorCisgICAgX2RlbGV0ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fZmluZEJyZWFrcG9pbnQoYnJl
YWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKS5kZWJ1Z2dlcklk
KTsKKyAgICAgICAgZGVsZXRlIHRoaXMuYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUoYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVtYmVyXTsKKyAgICB9LAorCisg
ICAgX3NldEJyZWFrcG9pbnRJbkRlYnVnZ2VyOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsK
KyAgICAgICAgaWYgKCFicmVha3BvaW50LmVuYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChicmVha3BvaW50SWQsIGxvY2F0aW9u
cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9kZWxldGVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUoYnJlYWtwb2ludC51aVNvdXJjZUNv
ZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50ICE9PSB0aGlzLl9maW5k
QnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1i
ZXIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3Bv
aW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0aGlzLl9iaW5kRGVidWdnZXJJZChicmVha3BvaW50LCBicmVha3Bv
aW50SWQpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9ucy5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludExvY2F0aW9uKGJyZWFrcG9pbnQsIGxvY2F0aW9uc1sw
XSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9p
bnRCeVNjcmlwdExvY2F0aW9uKGJyZWFrcG9pbnQucmF3TG9jYXRpb24sIGJyZWFrcG9pbnQuY29u
ZGl0aW9uLCBkaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfcmVt
b3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcjogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7Cisg
ICAgICAgIGlmICghKCJkZWJ1Z2dlcklkIiBpbiBicmVha3BvaW50KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJyZWFr
cG9pbnQuZGVidWdnZXJJZCk7CisgICAgICAgIHRoaXMuX3VuYmluZERlYnVnZ2VySWQoYnJlYWtw
b2ludCk7CisgICAgfSwKKworICAgIF9iaW5kRGVidWdnZXJJZDogZnVuY3Rpb24oYnJlYWtwb2lu
dCwgZGVidWdnZXJJZCkKKyAgICB7CisgICAgICAgIGJyZWFrcG9pbnQuZGVidWdnZXJJZCA9IGRl
YnVnZ2VySWQ7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlEZWJ1Z2dlcklkW2RlYnVnZ2Vy
SWRdID0gYnJlYWtwb2ludDsKKyAgICB9LAorCisgICAgX3VuYmluZERlYnVnZ2VySWQ6IGZ1bmN0
aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNC
eURlYnVnZ2VySWRbYnJlYWtwb2ludC5kZWJ1Z2dlcklkXTsKKyAgICAgICAgZGVsZXRlIGJyZWFr
cG9pbnQuZGVidWdnZXJJZDsKKyAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuZGVidWdnZXJMb2Nh
dGlvbjsKKyAgICB9LAorCisgICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQp
CisgICAgeworICAgICAgICB2YXIgZGVidWdnZXJJZCA9IGV2ZW50LmRhdGEuYnJlYWtwb2ludElk
OworICAgICAgICB2YXIgbG9jYXRpb24gPSBldmVudC5kYXRhLmxvY2F0aW9uOworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzQnlEZWJ1Z2dlcklkW2RlYnVnZ2VySWRd
OworICAgICAgICBpZiAoYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJyZWFr
cG9pbnRMb2NhdGlvbihicmVha3BvaW50LCBsb2NhdGlvbik7CisgICAgfSwKKworICAgIF91cGRh
dGVCcmVha3BvaW50TG9jYXRpb246IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGxvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgYnJlYWtwb2ludC5kZWJ1Z2dlckxvY2F0aW9uID0gbG9jYXRpb247CisgICAg
ICAgIGlmICghKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQgaW4gdGhpcy5fdWlTb3VyY2VDb2Rl
SW5mbykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0g
dGhpcy5fdWlTb3VyY2VDb2RlSW5mb1ticmVha3BvaW50LnVpU291cmNlQ29kZUlkXS5yYXdTb3Vy
Y2VDb2RlOworICAgICAgICB2YXIgbGluZU51bWJlciA9IHJhd1NvdXJjZUNvZGUucmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24obG9jYXRpb24pLmxpbmVOdW1iZXI7CisgICAgICAgIGlmIChsaW5lTnVt
YmVyID09PSBicmVha3BvaW50LmxpbmVOdW1iZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5icmVha3BvaW50c0ZvclVJU291cmNlQ29kZShi
cmVha3BvaW50LnVpU291cmNlQ29kZUlkKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRzW2xpbmVO
dW1iZXJdKSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC51
aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgYnJlYWtwb2ludHNbYnJlYWtwb2ludC5saW5l
TnVtYmVyXTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZShicmVha3Bv
aW50LnVpU291cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIpOworICAgICAgICBicmVh
a3BvaW50LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBicmVha3BvaW50c1ticmVh
a3BvaW50LmxpbmVOdW1iZXJdID0gYnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dEFkZGVkRGVsZWdhdGUoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5l
TnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICB9
LAorCisgICAgc2VyaWFsaXplQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHZhciBzZXJpYWxpemVkQnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgdGhpcy5fZm9yRWFjaEJy
ZWFrcG9pbnQoZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFicmVha3BvaW50LnBlcnNpc3RlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0ge307CisgICAgICAgICAgICBzZXJpYWxp
emVkQnJlYWtwb2ludC5zb3VyY2VGaWxlSWQgPSBicmVha3BvaW50LnVpU291cmNlQ29kZUlkOwor
ICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQubGluZU51bWJlciA9IGJyZWFrcG9pbnQu
bGluZU51bWJlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmNvbmRpdGlvbiA9
IGJyZWFrcG9pbnQuY29uZGl0aW9uOworICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQu
ZW5hYmxlZCA9IGJyZWFrcG9pbnQuZW5hYmxlZDsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRCcmVh
a3BvaW50cy5wdXNoKHNlcmlhbGl6ZWRCcmVha3BvaW50KTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBzZXJpYWxpemVkQnJlYWtwb2ludHM7CisgICAgfSwKKworICAgIHJlbW92ZUFsbEJy
ZWFrcG9pbnRzRnJvbURlYnVnZ2VyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl91
aVNvdXJjZUNvZGVJbmZvID0ge307CisgICAgICAgIHRoaXMuX2ZvckVhY2hCcmVha3BvaW50KGZ1
bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBicmVha3Bv
aW50LnJhd0xvY2F0aW9uOworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21E
ZWJ1Z2dlcihicmVha3BvaW50KTsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIGRlYnVnZ2Vy
UmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUluZm8g
PSB7fTsKKyAgICAgICAgdGhpcy5fZm9yRWFjaEJyZWFrcG9pbnQoZnVuY3Rpb24oYnJlYWtwb2lu
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50LnBlcnNpc3RlbnQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoImRlYnVnZ2VySWQiIGluIGJyZWFrcG9pbnQpCisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3VuYmluZERlYnVnZ2VySWQoYnJlYWtwb2ludCk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50LmRlYnVnZ2VyTG9jYXRp
b247CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICBfZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KHVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
YnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlSWQpW2xpbmVOdW1iZXJdOwor
ICAgIH0sCisKKyAgICBfZm9yRWFjaEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGhhbmRsZXIpCisgICAg
eworICAgICAgICBmb3IgKHZhciB1aVNvdXJjZUNvZGVJZCBpbiB0aGlzLl9icmVha3BvaW50cykg
eworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNbdWlTb3Vy
Y2VDb2RlSWRdOworICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVha3BvaW50
cykKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYnJlYWtwb2ludHNbbGluZU51
bWJlcl0pOworICAgICAgICB9CisgICAgfQorfQorCiBXZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9u
QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUZpbGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
ZW5hYmxlZCkKIHsKICAgICB0aGlzLnNvdXJjZUZpbGUgPSBzb3VyY2VGaWxlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104028</attachid>
            <date>2011-08-16 05:23:36 -0700</date>
            <delta_ts>2011-08-18 04:50:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66224-20110816162334.patch</filename>
            <type>text/plain</type>
            <size>30599</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5NjMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzEwMDU3ODk4OGE0MGNmMTcwYTVm
ZDU3ZDg0YzQzMzQxN2U3YTNkLi5mYWJlMDM5YzlmYTY3N2EyOTMwOTA0ODY3NmYwN2YwNmQ1ZmUz
MjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTUgIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXh0cmFj
dCBicmVha3BvaW50IG1hbmFnZW1lbnQgY29kZSB0byBhIGhlbHBlciBjbGFzcyBhbmQgYWRkIHRl
c3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYy
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9kZWwtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcHJlc2VudGF0
aW9uLW1vZGVsLmh0bWw6IEFkZGVkLgorCiAyMDExLTA4LTEyICBZdXJ5IFNlbWlraGF0c2t5ICA8
eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4cGFuZCBleGNl
cHRpb24gcHJvcGVydGllcyB3aGVuIHdyYXBwaW5nIGl0IGFzIG9iamVjdC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9k
ZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2Vy
LXByZXNlbnRhdGlvbi1tb2RlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRhZTk5N2VhMWI5
ODllZDg0ZDE0MTk2Yjc4ZmI4YmE5OGNjNzcyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVzZW50YXRpb24tbW9kZWwtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1Rlc3RzIERlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwg
Y2xhc3MuCisKKworUnVubmluZzogcmVnaXN0ZXJVSVNvdXJjZUNvZGUKK2JyZWFrcG9pbnRBZGRl
ZChhLmpzLCAxMCwgZm9vID09IGJhciwgdHJ1ZSkKK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAyMCwg
LCBmYWxzZSkKK2JyZWFrcG9pbnRBZGRlZChiLmpzLCAzLCAsIHRydWUpCitkZWJ1Z2dlck1vZGVs
LnNldEJyZWFrcG9pbnQoYS5qczoxMDowKQorCitSdW5uaW5nOiBzZXRBbmRSZW1vdmVCcmVha3Bv
aW50cworYnJlYWtwb2ludEFkZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQorYnJlYWtw
b2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQorYnJlYWtwb2ludEFkZGVkKGIuanMsIDMsICwg
dHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiticmVha3BvaW50
QWRkZWQoYS5qcywgMzAsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpz
OjMwOjApCiticmVha3BvaW50UmVtb3ZlZChhLmpzLCAzMCkKK2JyZWFrcG9pbnRSZW1vdmVkKGEu
anMsIDEwKQorZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGEuanM6MTA6MCkKK2JyZWFr
cG9pbnRSZW1vdmVkKGEuanMsIDIwKQorZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGEu
anM6MzA6MCkKKworUnVubmluZzogc2V0QnJlYWtwb2ludE9uQ29tbWVudAorYnJlYWtwb2ludEFk
ZGVkKGEuanMsIDE1LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYS5qczox
NTowKQorYnJlYWtwb2ludFJlbW92ZWQoYS5qcywgMTUpCiticmVha3BvaW50QWRkZWQoYS5qcywg
MTYsICwgdHJ1ZSkKKworUnVubmluZzogc2V0QnJlYWtwb2ludE91dHNpZGVPZlNjcmlwdAorYnJl
YWtwb2ludEFkZGVkKGEuanMsIDE1LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9p
bnQoYS5qczoxNTowKQorCitSdW5uaW5nOiB0ZXN0TmF2aWdhdGlvbgorYnJlYWtwb2ludEFkZGVk
KGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAs
IGZhbHNlKQorYnJlYWtwb2ludEFkZGVkKGIuanMsIDMsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludChhLmpzOjEwOjApCisKK05hdmlnYXRlIHRvIEIuCitkZWJ1Z2dlck1vZGVs
LnNldEJyZWFrcG9pbnQoYi5qczozOjApCisKK05hdmlnYXRlIGJhY2sgdG8gQS4KK2JyZWFrcG9p
bnRSZW1vdmVkKGEuanMsIDEwKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDExLCBmb28gPT0gYmFy
LCB0cnVlKQorU2VyaWFsaXplZCBicmVha3BvaW50czogW3sic291cmNlRmlsZUlkIjoiYS5qcyIs
ImxpbmVOdW1iZXIiOjExLCJjb25kaXRpb24iOiJmb28gPT0gYmFyIiwiZW5hYmxlZCI6dHJ1ZX0s
eyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MjAsImNvbmRpdGlvbiI6IiIsImVu
YWJsZWQiOmZhbHNlfSx7InNvdXJjZUZpbGVJZCI6ImIuanMiLCJsaW5lTnVtYmVyIjozLCJjb25k
aXRpb24iOiIiLCJlbmFibGVkIjp0cnVlfV0KKworUnVubmluZzogdGVzdEZvcm1hdHRpbmcKK2Jy
ZWFrcG9pbnRBZGRlZChjLmpzLCA0LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9p
bnQoYy5qczo0OjApCitbeyJzb3VyY2VGaWxlSWQiOiJjLmpzIiwibGluZU51bWJlciI6NCwiY29u
ZGl0aW9uIjoiIiwiZW5hYmxlZCI6dHJ1ZX1dCisKK0Zvcm1hdCBzb3VyY2UuCitkZWJ1Z2dlck1v
ZGVsLnJlbW92ZUJyZWFrcG9pbnQoYy5qczo0OjApCiticmVha3BvaW50QWRkZWQoZm9ybWF0dGVk
X2MuanMsIDQsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpzOjI6MCkK
K2JyZWFrcG9pbnRBZGRlZChmb3JtYXR0ZWRfYy5qcywgOCwgLCBmYWxzZSkKKworQ2hhbmdlIGJy
ZWFrcG9pbnRzLgorYnJlYWtwb2ludFJlbW92ZWQoZm9ybWF0dGVkX2MuanMsIDgpCiticmVha3Bv
aW50QWRkZWQoZm9ybWF0dGVkX2MuanMsIDEyLCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJy
ZWFrcG9pbnQoYy5qczo2OjApCisKK1JlbG9hZC4KK2JyZWFrcG9pbnRSZW1vdmVkKGZvcm1hdHRl
ZF9jLmpzLCA0KQorYnJlYWtwb2ludEFkZGVkKGZvcm1hdHRlZF9jLmpzLCA2LCAsIHRydWUpCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci1wcmVz
ZW50YXRpb24tbW9kZWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1
Z2dlci1wcmVzZW50YXRpb24tbW9kZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWQyYTIyOGM0Y2FjYTA3
ODY0ZTI2NGY3M2MzZWQ5YmI1MjEyNDhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXByZXNlbnRhdGlvbi1tb2RlbC5odG1sCkBAIC0w
LDAgKzEsMjc3IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKwor
ZnVuY3Rpb24gdGVzdCgpCit7CisgICAgZnVuY3Rpb24gY3JlYXRlRGVidWdnZXJNb2RlbCgpCisg
ICAgeworICAgICAgICB2YXIgZGVidWdnZXJNb2RlbCA9IHsKKyAgICAgICAgICAgIHNldEJyZWFr
cG9pbnRCeVNjcmlwdExvY2F0aW9uOiBmdW5jdGlvbihsb2NhdGlvbiwgY29uZGl0aW9uLCBjYWxs
YmFjaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0g
bG9jYXRpb24uc2NyaXB0SWQgKyAiOiIgKyBsb2NhdGlvbi5saW5lTnVtYmVyICsgIjoiICsgbG9j
YXRpb24uY29sdW1uTnVtYmVyOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoIiArIGJyZWFrcG9pbnRJZCArICIpIik7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEoYnJlYWtwb2ludElk
IGluIGRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHMpKTsKKyAgICAgICAgICAgICAgICBkZWJ1Z2dl
ck1vZGVsLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBjb25kaXRpb247CisgICAgICAgICAg
ICAgICAgdmFyIGxvY2F0aW9ucyA9IGRlYnVnZ2VyTW9kZWwuYWN0dWFsTG9jYXRpb25zID8gZGVi
dWdnZXJNb2RlbC5hY3R1YWxMb2NhdGlvbnMgOiBbbG9jYXRpb25dOworICAgICAgICAgICAgICAg
IGRlbGV0ZSBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhicmVha3BvaW50SWQsIGxvY2F0aW9ucyk7
IH0sIDApOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnRJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KCIgKyBi
cmVha3BvaW50SWQgKyAiKSIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
VHJ1ZShicmVha3BvaW50SWQgaW4gZGVidWdnZXJNb2RlbC5icmVha3BvaW50cyk7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIGRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBicmVha3BvaW50czoge30KKyAgICAgICAgfTsK
KyAgICAgICAgZGVidWdnZXJNb2RlbC5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZTsKKyAgICAgICAgcmV0dXJuIGRlYnVnZ2VyTW9kZWw7CisgICAgfQorCisgICAgdmFy
IHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICBmdW5jdGlvbiBicmVha3BvaW50QWRkZWQodWlTb3Vy
Y2VDb2RlSWQsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAgICB7CisgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJicmVha3BvaW50QWRkZWQoIiArIEFycmF5LnByb3Rv
dHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAiLCAiKSArICIpIik7CisgICAgICAgIHZhciBicmVh
a3BvaW50SWQgPSB1aVNvdXJjZUNvZGVJZCArICI6IiArIGxpbmVOdW1iZXI7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSghKGJyZWFrcG9pbnRJZCBpbiB1aUJyZWFrcG9pbnRzKSk7
CisgICAgICAgIHVpQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGNvbmRpdGlvbiArICJ8IiAr
IGVuYWJsZWQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGJyZWFrcG9pbnRSZW1vdmVkKHVpU291cmNl
Q29kZUlkLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoImJyZWFrcG9pbnRSZW1vdmVkKCIgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3Vt
ZW50cywgIiwgIikgKyAiKSIpOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdWlTb3VyY2VD
b2RlSWQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRy
dWUoYnJlYWtwb2ludElkIGluIHVpQnJlYWtwb2ludHMpOworICAgICAgICBkZWxldGUgdWlCcmVh
a3BvaW50c1ticmVha3BvaW50SWRdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZUJyZWFr
cG9pbnQodWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB7IHNvdXJjZUZpbGVJZDogdWlTb3VyY2VDb2RlSWQsIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsIGNvbmRpdGlvbjogY29uZGl0aW9uLCBlbmFibGVkOiBlbmFibGVk
IH07CisgICAgfQorICAgIHZhciBzZXJpYWxpemVkQnJlYWtwb2ludHMgPSBbXTsKKyAgICBzZXJp
YWxpemVkQnJlYWtwb2ludHMucHVzaChjcmVhdGVCcmVha3BvaW50KCJhLmpzIiwgMTAsICJmb28g
PT0gYmFyIiwgdHJ1ZSkpOworICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50cy5wdXNoKGNyZWF0ZUJy
ZWFrcG9pbnQoImEuanMiLCAyMCwgIiIsIGZhbHNlKSk7CisgICAgc2VyaWFsaXplZEJyZWFrcG9p
bnRzLnB1c2goY3JlYXRlQnJlYWtwb2ludCgiYi5qcyIsIDMsICIiLCB0cnVlKSk7CisKKyAgICB2
YXIgcmF3U291cmNlQ29kZUEgPSB7CisgICAgICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBm
dW5jdGlvbihyYXdMb2NhdGlvbikgeyByZXR1cm4gcmF3TG9jYXRpb247IH0sCisgICAgICAgIHVp
TG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
IHsgcmV0dXJuIHsgc2NyaXB0SWQ6ICJhLmpzIiwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29s
dW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfTsgfQorICAgIH07CisgICAgdmFyIHJhd1NvdXJjZUNv
ZGVCID0geworICAgICAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9j
YXRpb24pIHsgcmV0dXJuIHJhd0xvY2F0aW9uOyB9LAorICAgICAgICB1aUxvY2F0aW9uVG9SYXdM
b2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKSB7IHJldHVybiB7IHNj
cmlwdElkOiAiYi5qcyIsIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29s
dW1uTnVtYmVyIH07IH0KKyAgICB9OworCisgICAgSW5zcGVjdG9yVGVzdC5ydW5UZXN0U3VpdGUo
WworICAgICAgICBmdW5jdGlvbiByZWdpc3RlclVJU291cmNlQ29kZShuZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICB1aUJyZWFrcG9pbnRzID0ge307CisgICAgICAgICAgICB2YXIgZGVidWdn
ZXJNb2RlbCA9IGNyZWF0ZURlYnVnZ2VyTW9kZWwoKTsKKyAgICAgICAgICAgIHZhciBicmVha3Bv
aW50SGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50SGVscGVyKGRlYnVnZ2VyTW9k
ZWwsIHNlcmlhbGl6ZWRCcmVha3BvaW50cywgYnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50UmVt
b3ZlZCk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKEpTT04uc3Ry
aW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRI
ZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworICAgICAgICAgICAgYnJlYWtwb2ludEhl
bHBlci5yZWdpc3RlclVJU291cmNlQ29kZSgiYS5qcyIsIHJhd1NvdXJjZUNvZGVBLCB0cnVlKTsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KHNl
cmlhbGl6ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRIZWxwZXIuc2Vy
aWFsaXplQnJlYWtwb2ludHMoKSkpOworICAgICAgICAgICAgc2V0VGltZW91dChjaGVja1Jlc3Vs
dHMsIDApOworCisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTA6MCI6ICJmb28gPT0g
YmFyIn0sIGRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50
cyksIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRIZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMo
KSkpOworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KworICAgICAgICBmdW5jdGlvbiBzZXRBbmRSZW1vdmVCcmVha3BvaW50cyhuZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICB1aUJyZWFrcG9pbnRzID0ge307CisgICAgICAgICAgICB2YXIgZGVi
dWdnZXJNb2RlbCA9IGNyZWF0ZURlYnVnZ2VyTW9kZWwoKTsKKyAgICAgICAgICAgIHZhciBicmVh
a3BvaW50SGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50SGVscGVyKGRlYnVnZ2Vy
TW9kZWwsIHNlcmlhbGl6ZWRCcmVha3BvaW50cywgYnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50
UmVtb3ZlZCk7CisKKyAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxwZXIucmVnaXN0ZXJVSVNvdXJj
ZUNvZGUoImEuanMiLCByYXdTb3VyY2VDb2RlQSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KHNldEFuZFJlbW92ZSwgMCk7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldEFuZFJlbW92
ZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5zZXRC
cmVha3BvaW50KCJhLmpzIiwgMzAsICIiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBSZW1v
dmUgYnJlYWtwb2ludCBpbW1lZGlhdGVseSwgYnJlYWtwb2ludCBzaG91bGQgYmUgcmVtb3ZlZCBj
b3JyZWN0bHkgZnJvbSBib3RoIGRlYnVnZ2VyIG1vZGVsIGFuZCBVSS4KKyAgICAgICAgICAgICAg
ICBicmVha3BvaW50SGVscGVyLnJlbW92ZUJyZWFrcG9pbnQoImEuanMiLCAzMCk7CisKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlbW92ZUJyZWFrcG9pbnQoImEuanMiLCAxMCk7
CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5yZW1vdmVCcmVha3BvaW50KCJhLmpz
IiwgMjApOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXN1bHRzLCAwKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoe30sIGRlYnVnZ2VyTW9kZWwu
YnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhbeyJzb3VyY2VGaWxl
SWQiOiJiLmpzIiwibGluZU51bWJlciI6MywiY29uZGl0aW9uIjoiIiwiZW5hYmxlZCI6dHJ1ZX1d
LCBicmVha3BvaW50SGVscGVyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkpOworICAgICAgICAgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmdW5jdGlv
biBzZXRCcmVha3BvaW50T25Db21tZW50KG5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVp
QnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsID0gY3JlYXRl
RGVidWdnZXJNb2RlbCgpOworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRIZWxwZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIoZGVidWdnZXJNb2RlbCwgW10sIGJyZWFrcG9p
bnRBZGRlZCwgYnJlYWtwb2ludFJlbW92ZWQpOworCisgICAgICAgICAgICBicmVha3BvaW50SGVs
cGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpzIiwgcmF3U291cmNlQ29kZUEsIHRydWUpOwor
CisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9ucyA9IFt7IGxpbmVOdW1i
ZXI6IDE2LCBjb2x1bW5OdW1iZXI6IDAgfV07CisgICAgICAgICAgICBicmVha3BvaW50SGVscGVy
LnNldEJyZWFrcG9pbnQoImEuanMiLCAxNSwgIiIsIHRydWUpOworICAgICAgICAgICAgc2V0VGlt
ZW91dChjaGVja1Jlc3VsdHMsIDApOworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRz
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVx
dWFscygnW3sic291cmNlRmlsZUlkIjoiYS5qcyIsImxpbmVOdW1iZXIiOjE2LCJjb25kaXRpb24i
OiIiLCJlbmFibGVkIjp0cnVlfV0nLCBKU09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNl
cmlhbGl6ZUJyZWFrcG9pbnRzKCkpKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludE91dHNp
ZGVPZlNjcmlwdChuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB1aUJyZWFrcG9pbnRzID0g
e307CisgICAgICAgICAgICB2YXIgZGVidWdnZXJNb2RlbCA9IGNyZWF0ZURlYnVnZ2VyTW9kZWwo
KTsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50SGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50SGVscGVyKGRlYnVnZ2VyTW9kZWwsIFtdLCBicmVha3BvaW50QWRkZWQsIGJyZWFr
cG9pbnRSZW1vdmVkKTsKKworICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5yZWdpc3RlclVJ
U291cmNlQ29kZSgiYS5qcyIsIHJhd1NvdXJjZUNvZGVBLCB0cnVlKTsKKworICAgICAgICAgICAg
ZGVidWdnZXJNb2RlbC5hY3R1YWxMb2NhdGlvbnMgPSBbXTsKKyAgICAgICAgICAgIGJyZWFrcG9p
bnRIZWxwZXIuc2V0QnJlYWtwb2ludCgiYS5qcyIsIDE1LCAiIiwgdHJ1ZSk7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGNoZWNrUmVzdWx0cywgMCk7CisgICAgICAgICAgICBmdW5jdGlvbiBjaGVj
a1Jlc3VsdHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0RXF1YWxzKCdbeyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MTUsImNv
bmRpdGlvbiI6IiIsImVuYWJsZWQiOnRydWV9XScsIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRI
ZWxwZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworICAgICAgICAgICAgICAgIG5leHQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmdW5jdGlvbiB0ZXN0TmF2aWdh
dGlvbihuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB1aUJyZWFrcG9pbnRzID0ge307Cisg
ICAgICAgICAgICB2YXIgZGVidWdnZXJNb2RlbCA9IGNyZWF0ZURlYnVnZ2VyTW9kZWwoKTsKKyAg
ICAgICAgICAgIHZhciBicmVha3BvaW50SGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50SGVscGVyKGRlYnVnZ2VyTW9kZWwsIHNlcmlhbGl6ZWRCcmVha3BvaW50cywgYnJlYWtwb2lu
dEFkZGVkLCBicmVha3BvaW50UmVtb3ZlZCk7CisKKyAgICAgICAgICAgIGJyZWFrcG9pbnRIZWxw
ZXIucmVnaXN0ZXJVSVNvdXJjZUNvZGUoImEuanMiLCByYXdTb3VyY2VDb2RlQSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBzZXRUaW1lb3V0KG5hdmlnYXRlVG9CLCAwKTsKKworICAgICAgICAgICAgZnVu
Y3Rpb24gbmF2aWdhdGVUb0IoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2Vy
dEVxdWFscyh7ImEuanM6MTA6MCI6ImZvbyA9PSBiYXIifSwgZGVidWdnZXJNb2RlbC5icmVha3Bv
aW50cyk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoSlNPTi5z
dHJpbmdpZnkoc2VyaWFsaXplZEJyZWFrcG9pbnRzKSwgSlNPTi5zdHJpbmdpZnkoYnJlYWtwb2lu
dEhlbHBlci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiXG5OYXZpZ2F0ZSB0byBCLiIpOworICAgICAgICAgICAgICAg
IGJyZWFrcG9pbnRIZWxwZXIuZGVidWdnZXJSZXNldCgpOworCisgICAgICAgICAgICAgICAgYnJl
YWtwb2ludEhlbHBlci5yZWdpc3RlclVJU291cmNlQ29kZSgiYi5qcyIsIHJhd1NvdXJjZUNvZGVC
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG5hdmlnYXRlVG9BLCAwKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gbmF2aWdhdGVUb0EoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTA6MCI6ImZvbyA9
PSBiYXIiLCJiLmpzOjM6MCI6IiJ9LCBkZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzKTsKKyAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhKU09OLnN0cmluZ2lmeShzZXJp
YWxpemVkQnJlYWtwb2ludHMpLCBKU09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNlcmlh
bGl6ZUJyZWFrcG9pbnRzKCkpKTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KCJcbk5hdmlnYXRlIGJhY2sgdG8gQS4iKTsKKyAgICAgICAgICAgICAgICBicmVha3Bv
aW50SGVscGVyLmRlYnVnZ2VyUmVzZXQoKTsKKworICAgICAgICAgICAgICAgIHZhciBldmVudERh
dGEgPSB7IGJyZWFrcG9pbnRJZDogImEuanM6MTA6MCIsIGxvY2F0aW9uOiB7IHNjcmlwdElkOiAi
YS5qcyIsIGxpbmVOdW1iZXI6IDExLCBjb2x1bW5OdW1iZXI6IDUgfX07CisgICAgICAgICAgICAg
ICAgZGVidWdnZXJNb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgZXZlbnREYXRhKTsKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnJlZ2lzdGVyVUlTb3VyY2VDb2RlKCJhLmpzIiwg
cmF3U291cmNlQ29kZUEsIHRydWUpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tS
ZXN1bHRzLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tS
ZXN1bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJh
LmpzOjEwOjAiOiJmb28gPT0gYmFyIiwiYi5qczozOjAiOiIifSwgZGVidWdnZXJNb2RlbC5icmVh
a3BvaW50cyk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNlcmlh
bGl6ZWQgYnJlYWtwb2ludHM6ICIgKyBKU09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNl
cmlhbGl6ZUJyZWFrcG9pbnRzKCkpKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZvcm1hdHRpbmcobmV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9OworICAgICAgICAg
ICAgdmFyIGRlYnVnZ2VyTW9kZWwgPSBjcmVhdGVEZWJ1Z2dlck1vZGVsKCk7CisgICAgICAgICAg
ICB2YXIgYnJlYWtwb2ludEhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBl
cihkZWJ1Z2dlck1vZGVsLCBbY3JlYXRlQnJlYWtwb2ludCgiYy5qcyIsIDQsICIiLCB0cnVlKV0s
IGJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludFJlbW92ZWQpOworCisgICAgICAgICAgICB2YXIg
cmF3U291cmNlQ29kZUMgPSB7CisgICAgICAgICAgICAgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRp
b246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKSB7IHJldHVybiByYXdMb2NhdGlvbjsgfSwKKyAgICAg
ICAgICAgICAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSB7IHJldHVybiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07IH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICB2YXIgcmF3U291cmNlQ29kZUNGb3JtYXR0ZWQgPSB7CisgICAgICAgICAg
ICAgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKSB7IHJl
dHVybiB7IGxpbmVOdW1iZXI6IHJhd0xvY2F0aW9uLmxpbmVOdW1iZXIgKiAyLCBjb2x1bW5OdW1i
ZXI6IHJhd0xvY2F0aW9uLmNvbHVtbk51bWJlciAqIDIgfTsgfSwKKyAgICAgICAgICAgICAgICB1
aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVy
KSB7IHJldHVybiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IE1hdGguZmxvb3IobGlu
ZU51bWJlciAvIDIpLCBjb2x1bW5OdW1iZXI6IE1hdGguZmxvb3IoY29sdW1uTnVtYmVyIC8gMikg
fTsgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5yZWdp
c3RlclVJU291cmNlQ29kZSgiYy5qcyIsIHJhd1NvdXJjZUNvZGVDLCB0cnVlKTsKKyAgICAgICAg
ICAgIHNldFRpbWVvdXQoZm9ybWF0LCAwKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJjLmpzOjQ6
MCI6IiJ9LCBkZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdChKU09OLnN0cmluZ2lmeShicmVha3BvaW50SGVscGVyLnNlcmlh
bGl6ZUJyZWFrcG9pbnRzKCkpKTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KCJcbkZvcm1hdCBzb3VyY2UuIik7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhl
bHBlci5yZXNldCgpOworCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5yZWdpc3Rl
clVJU291cmNlQ29kZSgiZm9ybWF0dGVkX2MuanMiLCByYXdTb3VyY2VDb2RlQ0Zvcm1hdHRlZCwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludEhlbHBlci5zZXRCcmVha3BvaW50KCJm
b3JtYXR0ZWRfYy5qcyIsIDQsICIiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50
SGVscGVyLnNldEJyZWFrcG9pbnQoImZvcm1hdHRlZF9jLmpzIiwgOCwgIiIsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoYW5nZUJyZWFrcG9pbnRzLCAwKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlQnJlYWtwb2ludHMoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImMuanM6MjowIjoiIn0sIGRl
YnVnZ2VyTW9kZWwuYnJlYWtwb2ludHMpOworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRSZXN1bHQoIlxuQ2hhbmdlIGJyZWFrcG9pbnRzLiIpOworICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnRIZWxwZXIucmVtb3ZlQnJlYWtwb2ludCgiZm9ybWF0dGVkX2MuanMiLCA4KTsKKyAg
ICAgICAgICAgICAgICBicmVha3BvaW50SGVscGVyLnNldEJyZWFrcG9pbnQoImZvcm1hdHRlZF9j
LmpzIiwgMTIsICIiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlbG9hZCwg
MCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJlbG9hZCgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYy5qczoyOjAiOiIiLCJj
LmpzOjY6MCI6IiJ9LCBkZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzKTsKKworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcblJlbG9hZC4iKTsKKyAgICAgICAgICAgICAg
ICBicmVha3BvaW50SGVscGVyLmRlYnVnZ2VyUmVzZXQoKTsKKworICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnRIZWxwZXIucmVnaXN0ZXJVSVNvdXJjZUNvZGUoImZvcm1hdHRlZF9jLmpzIiwgcmF3
U291cmNlQ29kZUNGb3JtYXR0ZWQsIHRydWUpOworICAgICAgICAgICAgICAgIHZhciBldmVudERh
dGEgPSB7IGJyZWFrcG9pbnRJZDogImMuanM6MjowIiwgbG9jYXRpb246IHsgc2NyaXB0SWQ6ICJj
LmpzIiwgbGluZU51bWJlcjogMywgY29sdW1uTnVtYmVyOiAwIH19OworICAgICAgICAgICAgICAg
IGRlYnVnZ2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIGV2ZW50RGF0YSk7CisgICAgICAg
ICAgICAgICAgZXZlbnREYXRhID0geyBicmVha3BvaW50SWQ6ICJjLmpzOjY6MCIsIGxvY2F0aW9u
OiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IDYsIGNvbHVtbk51bWJlcjogMCB9fTsK
KyAgICAgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlc29sdmVkLCBldmVu
dERhdGEpOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXN1bHRzLCAwKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJjLmpzOjI6MCI6IiIsImMu
anM6NjowIjoiIn0sIGRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAg
IG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF0pOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0RXF1YWxzKG1hcDEsIG1hcDIpCisgICAgeworICAgICAgICBmb3IgKHZhciBwIGlu
IG1hcDEpCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUocCBpbiBtYXAyLCBw
ICsgIiBub3QgaW4gbWFwMiIpOworICAgICAgICBmb3IgKHZhciBwIGluIG1hcDIpCisgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUocCBpbiBtYXAxLCBwICsgIiBub3QgaW4gbWFw
MSIpOworICAgIH0KK307CisKKzwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
cnVuVGVzdCgpIj4KKzxwPlRlc3RzIERlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwgY2xhc3MuPC9w
PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWZlZDQ1NjhmZTQyMGRkZGY3ZDU0
ZGVkNDM4YWQ0ODc1NWIzMGExNS4uYjc1YTlkNDEzMDhiMjQyN2Y5NzAyNmNlY2JhODdiNWYzM2E2
MjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTA4LTE1ICBQYXZlbCBQb2Rp
dmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGV4dHJhY3QgYnJlYWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8gYSBoZWxwZXIgY2xhc3MgYW5k
IGFkZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MjI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXByZXNlbnRhdGlvbi1tb2RlbC5o
dG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuc2V0QnJlYWtwb2lu
dEJ5U2NyaXB0TG9jYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
SGVscGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SGVscGVyLnByb3RvdHlw
ZS5yZWdpc3RlclVJU291cmNlQ29kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dEhlbHBlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLnJlbW92ZUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90
eXBlLl9jcmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
SGVscGVyLnByb3RvdHlwZS5fZGVsZXRlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnRJbkRlYnVnZ2VyLmRp
ZFNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIu
cHJvdG90eXBlLl9zZXRCcmVha3BvaW50SW5EZWJ1Z2dlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tRGVidWdn
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLl9i
aW5kRGVidWdnZXJJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5w
cm90b3R5cGUuX3VuYmluZERlYnVnZ2VySWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRIZWxwZXIucHJvdG90eXBlLl9icmVha3BvaW50UmVzb2x2ZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBlLl91cGRhdGVCcmVha3BvaW50TG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIucHJvdG90eXBl
LnNlcmlhbGl6ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
SGVscGVyLnByb3RvdHlwZS5yZW1vdmVBbGxCcmVha3BvaW50c0Zyb21EZWJ1Z2dlcik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuZGVidWdnZXJSZXNl
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUuX2Zp
bmRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SGVscGVyLnBy
b3RvdHlwZS5fZm9yRWFjaEJyZWFrcG9pbnQpOgorCiAyMDExLTA4LTEyICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IGZvbGxvdyB1
cCB0byBpbnNwZWN0b3IgdGVzdCBicmVha2FnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcwppbmRleCA3YTUyYjkxZDQ4MWNkODZm
ODM4ZWIxZmRhMDMzNDVjMDNkYTZlMjlkLi4xZDk3ZTZlMWEyZmUwZDEwMmZmOWE2OTBmYTcwN2I5
Njg3MzM3OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RlYnVnZ2VyTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC03Myw2ICs3MywxNSBAQCBXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIERlYnVnZ2VyQWdlbnQuY29udGludWVUb0xv
Y2F0aW9uKGxvY2F0aW9uKTsKICAgICB9LAogCisgICAgc2V0QnJlYWtwb2ludEJ5U2NyaXB0TG9j
YXRpb246IGZ1bmN0aW9uKGxvY2F0aW9uLCBjb25kaXRpb24sIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuc2NyaXB0Rm9yU291cmNlSUQobG9jYXRpb24uc2NyaXB0
SWQpOworICAgICAgICBpZiAoc2NyaXB0LnNvdXJjZVVSTCkKKyAgICAgICAgICAgIHRoaXMuc2V0
QnJlYWtwb2ludChzY3JpcHQuc291cmNlVVJMLCBsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2NhdGlv
bi5jb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJhY2spOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0aGlzLnNldEJyZWFrcG9pbnRCeVNvdXJjZUlkKGxvY2F0aW9uLCBjb25kaXRpb24s
IGNhbGxiYWNrKTsKKyAgICB9LAorCiAgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJhY2spCiAgICAgewogICAg
ICAgICAvLyBBZGp1c3QgY29sdW1uIGlmIG5lZWRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5qcwppbmRleCAxMTczYTgwMzIwZGQxMzQyNmU3MjVkYTkyM2EzMTljMzkwYTU1YjE1Li4wYmQ5
MjUxN2IwZjY4MWUwYzQ3NGRlZjIzYmFlNzI1ODk2MTViMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRh
dGlvbk1vZGVsLmpzCkBAIC03MDIsNiArNzAyLDI2NSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJQ
cmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0
LnByb3RvdHlwZTsKIAorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIgPSBmdW5jdGlvbihk
ZWJ1Z2dlck1vZGVsLCBicmVha3BvaW50cywgYnJlYWtwb2ludEFkZGVkRGVsZWdhdGUsIGJyZWFr
cG9pbnRSZW1vdmVkRGVsZWdhdGUpCit7CisgICAgdGhpcy5fZGVidWdnZXJCcmVha3BvaW50cyA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEhlbHBlci5EZWJ1Z2dlckJyZWFrcG9pbnRzKGRl
YnVnZ2VyTW9kZWwsIHRoaXMuX2JyZWFrcG9pbnREZWJ1Z2dlckxvY2F0aW9uQ2hhbmdlZC5iaW5k
KHRoaXMpKTsKKyAgICB0aGlzLl91aUJyZWFrcG9pbnRzID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50SGVscGVyLlVJQnJlYWtwb2ludHMoYnJlYWtwb2ludEFkZGVkRGVsZWdhdGUsIGJyZWFr
cG9pbnRSZW1vdmVkRGVsZWdhdGUpOworICAgIHRoaXMuX3VpU291cmNlQ29kZUluZm8gPSB7fTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgIHZhciBzZXJpYWxpemVkQnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2Rlc2VyaWFsaXplQnJlYWtwb2ludChzZXJpYWxpemVkQnJl
YWtwb2ludCk7CisgICAgICAgIGJyZWFrcG9pbnQucGVyc2lzdGVudCA9IHRydWU7CisgICAgICAg
IGlmICghdGhpcy5fdWlCcmVha3BvaW50cy5icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VD
b2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpCisgICAgICAgICAgICB0aGlzLl91aUJyZWFr
cG9pbnRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEhlbHBlci5wcm90b3R5cGUgPSB7CisgICAgcmVnaXN0ZXJVSVNvdXJjZUNv
ZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZUlkLCByYXdTb3VyY2VDb2RlLCBwZXJzaXN0ZW50KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlSW5mb1t1aVNvdXJjZUNvZGVJZF0gPSB7
IHJhd1NvdXJjZUNvZGU6IHJhd1NvdXJjZUNvZGUsIHBlcnNpc3RlbnQ6IHBlcnNpc3RlbnQgfTsK
KyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fdWlCcmVha3BvaW50cy5icmVha3BvaW50
cyh1aVNvdXJjZUNvZGVJZCk7CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJlYWtw
b2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbbGluZU51
bWJlcl07CisgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQubWF0ZXJpYWxpemVkKQorICAgICAg
ICAgICAgICAgIHRoaXMuX21hdGVyaWFsaXplQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAg
ICAgICAgIGlmIChicmVha3BvaW50LmRlYnVnZ2VyTG9jYXRpb24pCisgICAgICAgICAgICAgICAg
dGhpcy5fYnJlYWtwb2ludERlYnVnZ2VyTG9jYXRpb25DaGFuZ2VkKGJyZWFrcG9pbnQsIGJyZWFr
cG9pbnQuZGVidWdnZXJMb2NhdGlvbik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgYnJlYWtw
b2ludHNGb3JVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZUlkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3VpQnJlYWtwb2ludHMuYnJlYWtwb2ludHModWlTb3VyY2VDb2Rl
SWQpOworICAgIH0sCisKKyAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGVJ
ZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX3VpQnJlYWtwb2ludHMuYnJlYWtwb2ludCh1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcikp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHBlcnNpc3RlbnQgPSB0aGlzLl91
aVNvdXJjZUNvZGVJbmZvW3VpU291cmNlQ29kZUlkXS5wZXJzaXN0ZW50OworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHsgdWlTb3VyY2VDb2RlSWQ6IHVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLCBjb25kaXRpb246IGNvbmRpdGlvbiwgZW5hYmxlZDogZW5hYmxlZCwgcGVy
c2lzdGVudDogcGVyc2lzdGVudCB9OworICAgICAgICB0aGlzLl91aUJyZWFrcG9pbnRzLmFkZEJy
ZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuX21hdGVyaWFsaXplQnJlYWtwb2lu
dChicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX3VpQnJlYWtwb2ludHMuYnJlYWtwb2ludCh1aVNvdXJjZUNvZGVJZCwgbGluZU51
bWJlcik7CisgICAgICAgIGlmICghYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5fdWlCcmVha3BvaW50cy5kZWxldGVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwor
ICAgICAgICB0aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludCk7CisgICAgfSwKKworICAgIF9tYXRlcmlhbGl6ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJy
ZWFrcG9pbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghYnJlYWtwb2ludC5tYXRl
cmlhbGl6ZWQpOworICAgICAgICBicmVha3BvaW50Lm1hdGVyaWFsaXplZCA9IHRydWU7CisgICAg
ICAgIGlmICghYnJlYWtwb2ludC5lbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoc3VjY2VzcykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnQgPT09IHRoaXMuX3VpQnJlYWtwb2ludHMuYnJlYWtwb2ludChi
cmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl91aUJy
ZWFrcG9pbnRzLmRlbGV0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB0
aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSB0aGlz
Ll91aVNvdXJjZUNvZGVJbmZvW2JyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWRdLnJhd1NvdXJjZUNv
ZGU7CisgICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHJhd1NvdXJjZUNvZGUudWlMb2NhdGlvblRv
UmF3TG9jYXRpb24oYnJlYWtwb2ludC5saW5lTnVtYmVyLCAwKTsKKyAgICAgICAgdGhpcy5fZGVi
dWdnZXJCcmVha3BvaW50cy5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQsIHJhd0xvY2F0aW9uLCBk
aWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludERl
YnVnZ2VyTG9jYXRpb25DaGFuZ2VkOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAg
ICAgaWYgKCEoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCBpbiB0aGlzLl91aVNvdXJjZUNvZGVJ
bmZvKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSB0
aGlzLl91aVNvdXJjZUNvZGVJbmZvW2JyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWRdLnJhd1NvdXJj
ZUNvZGU7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcmF3U291cmNlQ29kZS5yYXdMb2NhdGlv
blRvVUlMb2NhdGlvbihicmVha3BvaW50LmRlYnVnZ2VyTG9jYXRpb24pLmxpbmVOdW1iZXI7Cisg
ICAgICAgIGlmIChsaW5lTnVtYmVyID09PSBicmVha3BvaW50LmxpbmVOdW1iZXIpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLl91aUJyZWFrcG9pbnRzLm1vdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIpKQorICAgICAgICAgICAgdGhpcy5fZGVidWdn
ZXJCcmVha3BvaW50cy5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgIH0sCisKKyAg
ICBzZXJpYWxpemVCcmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNl
cmlhbGl6ZWRCcmVha3BvaW50cyA9IFtdOworICAgICAgICBmdW5jdGlvbiBzZXJpYWxpemVQZXJz
aXN0ZW50KGJyZWFrcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50
LnBlcnNpc3RlbnQpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnRzLnB1c2go
dGhpcy5fc2VyaWFsaXplQnJlYWtwb2ludChicmVha3BvaW50KSk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdWlCcmVha3BvaW50cy5mb3JFYWNoKHNlcmlhbGl6ZVBlcnNpc3RlbnQuYmluZCh0
aGlzKSk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVkQnJlYWtwb2ludHM7CisgICAgfSwKKwor
ICAgIF9zZXJpYWxpemVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAg
ICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0ge307CisgICAgICAgIHNlcmlhbGl6ZWRC
cmVha3BvaW50LnNvdXJjZUZpbGVJZCA9IGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQ7CisgICAg
ICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmxpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmVOdW1i
ZXI7CisgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmNvbmRpdGlvbiA9IGJyZWFrcG9pbnQu
Y29uZGl0aW9uOworICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5lbmFibGVkID0gYnJlYWtw
b2ludC5lbmFibGVkOworICAgICAgICByZXR1cm4gc2VyaWFsaXplZEJyZWFrcG9pbnQ7CisgICAg
fSwKKworICAgIF9kZXNlcmlhbGl6ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNlcmlhbGl6ZWRCcmVh
a3BvaW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB7fTsKKyAgICAgICAgYnJl
YWtwb2ludC51aVNvdXJjZUNvZGVJZCA9IHNlcmlhbGl6ZWRCcmVha3BvaW50LnNvdXJjZUZpbGVJ
ZDsKKyAgICAgICAgYnJlYWtwb2ludC5saW5lTnVtYmVyID0gc2VyaWFsaXplZEJyZWFrcG9pbnQu
bGluZU51bWJlcjsKKyAgICAgICAgYnJlYWtwb2ludC5jb25kaXRpb24gPSBzZXJpYWxpemVkQnJl
YWtwb2ludC5jb25kaXRpb247CisgICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9IHNlcmlhbGl6
ZWRCcmVha3BvaW50LmVuYWJsZWQ7CisgICAgICAgIHJldHVybiBicmVha3BvaW50OworICAgIH0s
CisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdWlTb3VyY2VD
b2RlSW5mbyA9IHt9OworICAgICAgICB0aGlzLl91aUJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rp
b24oYnJlYWtwb2ludCkgeyBkZWxldGUgYnJlYWtwb2ludC5tYXRlcmlhbGl6ZWQ7IH0pOworICAg
ICAgICB0aGlzLl9kZWJ1Z2dlckJyZWFrcG9pbnRzLnJlbW92ZUFsbEJyZWFrcG9pbnRzKCk7Cisg
ICAgfSwKKworICAgIGRlYnVnZ2VyUmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMuX3VpU291cmNlQ29kZUluZm8gPSB7fTsKKyAgICAgICAgZnVuY3Rpb24gZGVsZXRlTm90UGVy
c2lzdGVudChicmVha3BvaW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWJyZWFrcG9p
bnQucGVyc2lzdGVudCkKKyAgICAgICAgICAgICAgICB0aGlzLl91aUJyZWFrcG9pbnRzLmRlbGV0
ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdWlCcmVh
a3BvaW50cy5mb3JFYWNoKGRlbGV0ZU5vdFBlcnNpc3RlbnQuYmluZCh0aGlzKSk7CisgICAgICAg
IHRoaXMuX2RlYnVnZ2VyQnJlYWtwb2ludHMuZGVidWdnZXJSZXNldCgpOworICAgIH0KK30KKwor
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIuRGVidWdnZXJCcmVha3BvaW50cyA9IGZ1bmN0
aW9uKGRlYnVnZ2VyTW9kZWwsIGRlYnVnZ2VyTG9jYXRpb25DaGFuZ2VkRGVsZWdhdGUpCit7Cisg
ICAgdGhpcy5fZGVidWdnZXJNb2RlbCA9IGRlYnVnZ2VyTW9kZWw7CisgICAgdGhpcy5fZGVidWdn
ZXJMb2NhdGlvbkNoYW5nZWREZWxlZ2F0ZSA9IGRlYnVnZ2VyTG9jYXRpb25DaGFuZ2VkRGVsZWdh
dGU7CisgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICB0aGlzLl9kZWJ1Z2dlck1vZGVs
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFr
cG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJlc29sdmVkLCB0aGlzKTsKK30KKworV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIuRGVidWdnZXJCcmVha3BvaW50cy5wcm90b3R5cGUg
PSB7CisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCwgcmF3TG9jYXRpb24s
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChicmVh
a3BvaW50SWQsIGxvY2F0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3Bv
aW50SWQpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50
c1ticmVha3BvaW50SWRdID0gYnJlYWtwb2ludDsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQuX2Jy
ZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnRJZDsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRydWUpOwor
CisgICAgICAgICAgICBicmVha3BvaW50LmRlYnVnZ2VyTG9jYXRpb24gPSBsb2NhdGlvbnNbMF07
CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5kZWJ1Z2dlckxvY2F0aW9uKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2RlYnVnZ2VyTG9jYXRpb25DaGFuZ2VkRGVsZWdhdGUoYnJlYWtwb2ludCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50QnlT
Y3JpcHRMb2NhdGlvbihyYXdMb2NhdGlvbiwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJy
ZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBpZiAoISgiX2JyZWFrcG9pbnRJZCIg
aW4gYnJlYWtwb2ludCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2RlYnVn
Z2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50Ll9icmVha3BvaW50SWQpOworICAg
ICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5fYnJlYWtwb2ludElkXTsK
KyAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JyZWFrcG9pbnRJZDsKKyAgICAgICAgZGVsZXRl
IGJyZWFrcG9pbnQuZGVidWdnZXJMb2NhdGlvbjsKKyAgICB9LAorCisgICAgX2JyZWFrcG9pbnRS
ZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LmRhdGEuYnJlYWtwb2ludElkXTsKKyAgICAgICAgYnJl
YWtwb2ludC5kZWJ1Z2dlckxvY2F0aW9uID0gZXZlbnQuZGF0YS5sb2NhdGlvbjsKKyAgICAgICAg
dGhpcy5fZGVidWdnZXJMb2NhdGlvbkNoYW5nZWREZWxlZ2F0ZShicmVha3BvaW50KTsKKyAgICB9
LAorCisgICAgcmVtb3ZlQWxsQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKQorICAgICAgICAgICAgdGhpcy5yZW1v
dmVCcmVha3BvaW50KHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7CisgICAgfSwKKworICAgIGRlYnVn
Z2VyUmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFr
cG9pbnRzW2lkXTsKKyAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC5wZXJzaXN0ZW50KQorICAg
ICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50Ll9icmVha3Bv
aW50SWRdOworICAgICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuZGVidWdnZXJMb2NhdGlvbjsK
KyAgICAgICAgfQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIuVUlC
cmVha3BvaW50cyA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRBZGRlZERlbGVnYXRlLCBicmVha3BvaW50
UmVtb3ZlZERlbGVnYXRlKQoreworICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlID0g
YnJlYWtwb2ludEFkZGVkRGVsZWdhdGU7CisgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxl
Z2F0ZSA9IGJyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGU7CisgICAgdGhpcy5fYnJlYWtwb2ludHMg
PSB7fTsKK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRIZWxwZXIuVUlCcmVha3BvaW50cy5w
cm90b3R5cGUgPSB7CisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAg
ICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLmJyZWFrcG9pbnQoYnJlYWtwb2ludC51
aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKSk7CisgICAgICAgIHRoaXMuYnJl
YWtwb2ludHMoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVtYmVy
XSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlKGJy
ZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlciwgYnJlYWtwb2lu
dC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7CisgICAgfSwKKworICAgIGRlbGV0ZUJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLmJyZWFrcG9pbnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2lu
dC5saW5lTnVtYmVyKSA9PT0gYnJlYWtwb2ludCk7CisgICAgICAgIGRlbGV0ZSB0aGlzLmJyZWFr
cG9pbnRzKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQpW2JyZWFrcG9pbnQubGluZU51bWJlcl07
CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUoYnJlYWtwb2ludC51aVNv
dXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgbW92ZUJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIpCisgICAgeworICAgICAg
ICB0aGlzLmRlbGV0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIGlmICh0aGlzLmJy
ZWFrcG9pbnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrcG9pbnQubGluZU51bWJlciA9IGxpbmVO
dW1iZXI7CisgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSwKKworICAgIGJyZWFrcG9pbnRzOiBmdW5jdGlvbih1aVNvdXJj
ZUNvZGVJZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYnJlYWtwb2ludHNbdWlTb3VyY2VD
b2RlSWRdKQorICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbdWlTb3VyY2VDb2RlSWRdID0g
e307CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c1t1aVNvdXJjZUNvZGVJZF07Cisg
ICAgfSwKKworICAgIGJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZUlkLCBsaW5lTnVt
YmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludHModWlTb3VyY2VDb2Rl
SWQpW2xpbmVOdW1iZXJdOworICAgIH0sCisKKyAgICBmb3JFYWNoOiBmdW5jdGlvbihoYW5kbGVy
KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgdWlTb3VyY2VDb2RlSWQgaW4gdGhpcy5fYnJlYWtw
b2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRz
W3VpU291cmNlQ29kZUlkXTsKKyAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJl
YWtwb2ludHMpCisgICAgICAgICAgICAgICAgaGFuZGxlcihicmVha3BvaW50c1tsaW5lTnVtYmVy
XSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCiBXZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9u
QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUZpbGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
ZW5hYmxlZCkKIHsKICAgICB0aGlzLnNvdXJjZUZpbGUgPSBzb3VyY2VGaWxlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104324</attachid>
            <date>2011-08-18 04:50:13 -0700</date>
            <delta_ts>2011-08-18 07:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66224-20110818155011.patch</filename>
            <type>text/plain</type>
            <size>34480</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5NjMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzEwMDU3ODk4OGE0MGNmMTcwYTVm
ZDU3ZDg0YzQzMzQxN2U3YTNkLi41N2Q3MzgzYzE3OTY0Y2E2Yjc2NDJhMTU2MzE3NjMxMDc2ZWE0
MzcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTggIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXh0cmFj
dCBicmVha3BvaW50IG1hbmFnZW1lbnQgY29kZSB0byBhIHNlcGFyYXRlIGNsYXNzIGFuZCBhZGQg
dGVzdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjIyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFuYWdlci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbDog
QWRkZWQuCisKIDIwMTEtMDgtMTIgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZXhwYW5kIGV4Y2VwdGlvbiBwcm9wZXJ0aWVz
IHdoZW4gd3JhcHBpbmcgaXQgYXMgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFuYWdlci1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MThjNjljNWMwOWFhNzg3MWZlYmI1N2IyNDg2ZmRmNTEzMDQ4MDgyCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQt
bWFuYWdlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2NiBAQAorVGVzdHMgQnJlYWtwb2ludE1h
bmFnZXIgY2xhc3MuCisKKworUnVubmluZzogdWlTb3VyY2VDb2RlQWRkZWQKK2JyZWFrcG9pbnRB
ZGRlZChhLmpzLCAxMCwgZm9vID09IGJhciwgdHJ1ZSkKK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAy
MCwgLCBmYWxzZSkKK2JyZWFrcG9pbnRBZGRlZChiLmpzLCAzLCAsIHRydWUpCitkZWJ1Z2dlck1v
ZGVsLnNldEJyZWFrcG9pbnQoYS5qczoxMDowKQorCitSdW5uaW5nOiBzZXRBbmRSZW1vdmVCcmVh
a3BvaW50cworYnJlYWtwb2ludEFkZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQorYnJl
YWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQorYnJlYWtwb2ludEFkZGVkKGIuanMsIDMs
ICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiticmVha3Bv
aW50QWRkZWQoYS5qcywgMzAsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChh
LmpzOjMwOjApCiticmVha3BvaW50UmVtb3ZlZChhLmpzLCAzMCkKK2JyZWFrcG9pbnRSZW1vdmVk
KGEuanMsIDEwKQorZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGEuanM6MTA6MCkKK2Jy
ZWFrcG9pbnRSZW1vdmVkKGEuanMsIDIwKQorZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50
KGEuanM6MzA6MCkKKworUnVubmluZzogc2V0QnJlYWtwb2ludE9uQ29tbWVudAorYnJlYWtwb2lu
dEFkZGVkKGEuanMsIDE1LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYS5q
czoxNTowKQorYnJlYWtwb2ludFJlbW92ZWQoYS5qcywgMTUpCiticmVha3BvaW50QWRkZWQoYS5q
cywgMTYsICwgdHJ1ZSkKKworUnVubmluZzogc2V0QnJlYWtwb2ludE91dHNpZGVPZlNjcmlwdAor
YnJlYWtwb2ludEFkZGVkKGEuanMsIDE1LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFr
cG9pbnQoYS5qczoxNTowKQorCitSdW5uaW5nOiB0ZXN0TmF2aWdhdGlvbgorYnJlYWtwb2ludEFk
ZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDIw
LCAsIGZhbHNlKQorYnJlYWtwb2ludEFkZGVkKGIuanMsIDMsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9k
ZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCisKK05hdmlnYXRlIHRvIEIuCitkZWJ1Z2dlck1v
ZGVsLnNldEJyZWFrcG9pbnQoYi5qczozOjApCisKK05hdmlnYXRlIGJhY2sgdG8gQS4KK2JyZWFr
cG9pbnRSZW1vdmVkKGEuanMsIDEwKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDExLCBmb28gPT0g
YmFyLCB0cnVlKQorU2VyaWFsaXplZCBicmVha3BvaW50czogW3sic291cmNlRmlsZUlkIjoiYS5q
cyIsImxpbmVOdW1iZXIiOjExLCJjb25kaXRpb24iOiJmb28gPT0gYmFyIiwiZW5hYmxlZCI6dHJ1
ZX0seyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MjAsImNvbmRpdGlvbiI6IiIs
ImVuYWJsZWQiOmZhbHNlfSx7InNvdXJjZUZpbGVJZCI6ImIuanMiLCJsaW5lTnVtYmVyIjozLCJj
b25kaXRpb24iOiIiLCJlbmFibGVkIjp0cnVlfV0KKworUnVubmluZzogdGVzdEZvcm1hdHRpbmcK
K2JyZWFrcG9pbnRBZGRlZChjLmpzLCA0LCAsIHRydWUpCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFr
cG9pbnQoYy5qczo0OjApCitbeyJzb3VyY2VGaWxlSWQiOiJjLmpzIiwibGluZU51bWJlciI6NCwi
Y29uZGl0aW9uIjoiIiwiZW5hYmxlZCI6dHJ1ZX1dCisKK0Zvcm1hdCBzb3VyY2UuCitkZWJ1Z2dl
ck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYy5qczo0OjApCiticmVha3BvaW50QWRkZWQoZGVvYmZ1
c2NhdGVkOmMuanMsIDQsICwgdHJ1ZSkKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpz
OjI6MCkKK2JyZWFrcG9pbnRBZGRlZChkZW9iZnVzY2F0ZWQ6Yy5qcywgOCwgLCBmYWxzZSkKKwor
Q2hhbmdlIGJyZWFrcG9pbnRzLgorYnJlYWtwb2ludFJlbW92ZWQoZGVvYmZ1c2NhdGVkOmMuanMs
IDgpCiticmVha3BvaW50QWRkZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDEyLCAsIHRydWUpCitkZWJ1
Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczo2OjApCisKK1JlbG9hZC4KK2JyZWFrcG9pbnRS
ZW1vdmVkKGRlb2JmdXNjYXRlZDpjLmpzLCA0KQorYnJlYWtwb2ludEFkZGVkKGRlb2JmdXNjYXRl
ZDpjLmpzLCA2LCAsIHRydWUpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTQ3NDlkZDZhYWU1
MjVjZjRlY2UzNzMwNWNkNWE0NWEzMGI2OTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFuYWdlci5odG1sCkBAIC0wLDAgKzEs
MjkzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKworZnVuY3Rp
b24gdGVzdCgpCit7CisgICAgZnVuY3Rpb24gY3JlYXRlRGVidWdnZXJNb2RlbCgpCisgICAgewor
ICAgICAgICB2YXIgZGVidWdnZXJNb2RlbCA9IHsKKyAgICAgICAgICAgIHNldEJyZWFrcG9pbnRC
eVNjcmlwdExvY2F0aW9uOiBmdW5jdGlvbihsb2NhdGlvbiwgY29uZGl0aW9uLCBjYWxsYmFjaykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gbG9jYXRp
b24uc2NyaXB0SWQgKyAiOiIgKyBsb2NhdGlvbi5saW5lTnVtYmVyICsgIjoiICsgbG9jYXRpb24u
Y29sdW1uTnVtYmVyOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJk
ZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoIiArIGJyZWFrcG9pbnRJZCArICIpIik7CisgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEoYnJlYWtwb2ludElkIGluIGRl
YnVnZ2VyTW9kZWwuYnJlYWtwb2ludHMpKTsKKyAgICAgICAgICAgICAgICBkZWJ1Z2dlck1vZGVs
LmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBjb25kaXRpb247CisgICAgICAgICAgICAgICAg
dmFyIGxvY2F0aW9ucyA9IGRlYnVnZ2VyTW9kZWwuYWN0dWFsTG9jYXRpb25zID8gZGVidWdnZXJN
b2RlbC5hY3R1YWxMb2NhdGlvbnMgOiBbbG9jYXRpb25dOworICAgICAgICAgICAgICAgIGRlbGV0
ZSBkZWJ1Z2dlck1vZGVsLmFjdHVhbExvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhicmVha3BvaW50SWQsIGxvY2F0aW9ucyk7IH0sIDAp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnRJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFkZFJlc3VsdCgiZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KCIgKyBicmVha3Bv
aW50SWQgKyAiKSIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZShi
cmVha3BvaW50SWQgaW4gZGVidWdnZXJNb2RlbC5icmVha3BvaW50cyk7CisgICAgICAgICAgICAg
ICAgZGVsZXRlIGRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBicmVha3BvaW50czoge30KKyAgICAgICAgfTsKKyAgICAg
ICAgZGVidWdnZXJNb2RlbC5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZTsKKyAgICAgICAgcmV0dXJuIGRlYnVnZ2VyTW9kZWw7CisgICAgfQorCisgICAgdmFyIHVpQnJl
YWtwb2ludHMgPSB7fTsKKyAgICBmdW5jdGlvbiBicmVha3BvaW50QWRkZWQodWlTb3VyY2VDb2Rl
SWQsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAgICB7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJicmVha3BvaW50QWRkZWQoIiArIEFycmF5LnByb3RvdHlwZS5q
b2luLmNhbGwoYXJndW1lbnRzLCAiLCAiKSArICIpIik7CisgICAgICAgIHZhciBicmVha3BvaW50
SWQgPSB1aVNvdXJjZUNvZGVJZCArICI6IiArIGxpbmVOdW1iZXI7CisgICAgICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0VHJ1ZSghKGJyZWFrcG9pbnRJZCBpbiB1aUJyZWFrcG9pbnRzKSk7CisgICAg
ICAgIHVpQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGNvbmRpdGlvbiArICJ8IiArIGVuYWJs
ZWQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGJyZWFrcG9pbnRSZW1vdmVkKHVpU291cmNlQ29kZUlk
LCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImJy
ZWFrcG9pbnRSZW1vdmVkKCIgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywg
IiwgIikgKyAiKSIpOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdWlTb3VyY2VDb2RlSWQg
KyAiOiIgKyBsaW5lTnVtYmVyOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoYnJl
YWtwb2ludElkIGluIHVpQnJlYWtwb2ludHMpOworICAgICAgICBkZWxldGUgdWlCcmVha3BvaW50
c1ticmVha3BvaW50SWRdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnQo
dWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB7IHNvdXJjZUZpbGVJZDogdWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsIGNvbmRpdGlvbjogY29uZGl0aW9uLCBlbmFibGVkOiBlbmFibGVkIH07Cisg
ICAgfQorICAgIHZhciBzZXJpYWxpemVkQnJlYWtwb2ludHMgPSBbXTsKKyAgICBzZXJpYWxpemVk
QnJlYWtwb2ludHMucHVzaChjcmVhdGVCcmVha3BvaW50KCJhLmpzIiwgMTAsICJmb28gPT0gYmFy
IiwgdHJ1ZSkpOworICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50cy5wdXNoKGNyZWF0ZUJyZWFrcG9p
bnQoImEuanMiLCAyMCwgIiIsIGZhbHNlKSk7CisgICAgc2VyaWFsaXplZEJyZWFrcG9pbnRzLnB1
c2goY3JlYXRlQnJlYWtwb2ludCgiYi5qcyIsIDMsICIiLCB0cnVlKSk7CisKKyAgICB2YXIgdWlT
b3VyY2VDb2RlQSA9IHsKKyAgICAgICAgaWQ6ICJhLmpzIiwKKyAgICAgICAgdXJsOiAiYS5qcyIs
CisgICAgICAgIHJhd1NvdXJjZUNvZGU6IHsKKyAgICAgICAgICAgIHJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikgeyByZXR1cm4gcmF3TG9jYXRpb247IH0sCisg
ICAgICAgICAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSB7IHJldHVybiB7IHNjcmlwdElkOiAiYS5qcyIsIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07IH0KKyAgICAgICAgfQorICAg
IH07CisgICAgdmFyIHVpU291cmNlQ29kZUIgPSB7CisgICAgICAgIGlkOiAiYi5qcyIsCisgICAg
ICAgIHVybDogImIuanMiLAorICAgICAgICByYXdTb3VyY2VDb2RlOiB7CisgICAgICAgICAgICBy
YXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pIHsgcmV0dXJuIHJh
d0xvY2F0aW9uOyB9LAorICAgICAgICAgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikgeyByZXR1cm4geyBzY3JpcHRJZDogImIuanMi
LCBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OyB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZShbCisg
ICAgICAgIGZ1bmN0aW9uIHVpU291cmNlQ29kZUFkZGVkKG5leHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgIHZhciBkZWJ1Z2dlck1vZGVs
ID0gY3JlYXRlRGVidWdnZXJNb2RlbCgpOworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRNYW5h
Z2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcihkZWJ1Z2dlck1vZGVsLCBz
ZXJpYWxpemVkQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludFJlbW92ZWQp
OworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhKU09OLnN0cmluZ2lm
eShzZXJpYWxpemVkQnJlYWtwb2ludHMpLCBKU09OLnN0cmluZ2lmeShicmVha3BvaW50TWFuYWdl
ci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisgICAgICAgICAgICBicmVha3BvaW50TWFuYWdl
ci51aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGVBKTsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0RXF1YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50cyks
IEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRNYW5hZ2VyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkp
KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXN1bHRzLCAwKTsKKworICAgICAgICAg
ICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwOjAiOiAiZm9vID09IGJhciJ9LCBkZWJ1Z2dlck1vZGVs
LmJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFs
cyhKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkQnJlYWtwb2ludHMpLCBKU09OLnN0cmluZ2lmeShi
cmVha3BvaW50TWFuYWdlci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisgICAgICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGZ1bmN0aW9u
IHNldEFuZFJlbW92ZUJyZWFrcG9pbnRzKG5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVp
QnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsID0gY3JlYXRl
RGVidWdnZXJNb2RlbCgpOworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcihkZWJ1Z2dlck1vZGVsLCBzZXJpYWxpemVk
QnJlYWtwb2ludHMsIGJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludFJlbW92ZWQpOworCisgICAg
ICAgICAgICBicmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGVB
KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoc2V0QW5kUmVtb3ZlLCAwKTsKKworICAgICAgICAg
ICAgZnVuY3Rpb24gc2V0QW5kUmVtb3ZlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBicmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHVpU291cmNlQ29kZUEsIDMwLCAiIiwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJyZWFrcG9pbnQgaW1tZWRpYXRlbHks
IGJyZWFrcG9pbnQgc2hvdWxkIGJlIHJlbW92ZWQgY29ycmVjdGx5IGZyb20gYm90aCBkZWJ1Z2dl
ciBtb2RlbCBhbmQgVUkuCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIucmVtb3Zl
QnJlYWtwb2ludCh1aVNvdXJjZUNvZGVBLmlkLCAzMCk7CisKKyAgICAgICAgICAgICAgICBicmVh
a3BvaW50TWFuYWdlci5yZW1vdmVCcmVha3BvaW50KHVpU291cmNlQ29kZUEuaWQsIDEwKTsKKyAg
ICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci5yZW1vdmVCcmVha3BvaW50KHVpU291cmNl
Q29kZUEuaWQsIDIwKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVzdWx0cywg
MCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0cygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHt9LCBkZWJ1Z2dl
ck1vZGVsLmJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoW3sic291
cmNlRmlsZUlkIjoiYi5qcyIsImxpbmVOdW1iZXIiOjMsImNvbmRpdGlvbiI6IiIsImVuYWJsZWQi
OnRydWV9XSwgYnJlYWtwb2ludE1hbmFnZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSk7CisgICAg
ICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IGZ1bmN0aW9uIHNldEJyZWFrcG9pbnRPbkNvbW1lbnQobmV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdWlCcmVha3BvaW50cyA9IHt9OworICAgICAgICAgICAgdmFyIGRlYnVnZ2VyTW9kZWwg
PSBjcmVhdGVEZWJ1Z2dlck1vZGVsKCk7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludE1hbmFn
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKGRlYnVnZ2VyTW9kZWwsIFtd
LCBicmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRSZW1vdmVkKTsKKworICAgICAgICAgICAgYnJl
YWtwb2ludE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlQSk7CisKKyAgICAg
ICAgICAgIGRlYnVnZ2VyTW9kZWwuYWN0dWFsTG9jYXRpb25zID0gW3sgbGluZU51bWJlcjogMTYs
IGNvbHVtbk51bWJlcjogMCB9XTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLnNldEJy
ZWFrcG9pbnQodWlTb3VyY2VDb2RlQSwgMTUsICIiLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoY2hlY2tSZXN1bHRzLCAwKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0
cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRF
cXVhbHMoJ1t7InNvdXJjZUZpbGVJZCI6ImEuanMiLCJsaW5lTnVtYmVyIjoxNiwiY29uZGl0aW9u
IjoiIiwiZW5hYmxlZCI6dHJ1ZX1dJywgSlNPTi5zdHJpbmdpZnkoYnJlYWtwb2ludE1hbmFnZXIu
c2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmdW5jdGlvbiBzZXRCcmVha3BvaW50T3V0
c2lkZU9mU2NyaXB0KG5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpQnJlYWtwb2ludHMg
PSB7fTsKKyAgICAgICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsID0gY3JlYXRlRGVidWdnZXJNb2Rl
bCgpOworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlcihkZWJ1Z2dlck1vZGVsLCBbXSwgYnJlYWtwb2ludEFkZGVkLCBi
cmVha3BvaW50UmVtb3ZlZCk7CisKKyAgICAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLnVpU291
cmNlQ29kZUFkZGVkKHVpU291cmNlQ29kZUEpOworCisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVs
LmFjdHVhbExvY2F0aW9ucyA9IFtdOworICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIuc2V0
QnJlYWtwb2ludCh1aVNvdXJjZUNvZGVBLCAxNSwgIiIsIHRydWUpOworICAgICAgICAgICAgc2V0
VGltZW91dChjaGVja1Jlc3VsdHMsIDApOworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1
bHRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dEVxdWFscygnW3sic291cmNlRmlsZUlkIjoiYS5qcyIsImxpbmVOdW1iZXIiOjE1LCJjb25kaXRp
b24iOiIiLCJlbmFibGVkIjp0cnVlfV0nLCBKU09OLnN0cmluZ2lmeShicmVha3BvaW50TWFuYWdl
ci5zZXJpYWxpemVCcmVha3BvaW50cygpKSk7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGZ1bmN0aW9uIHRlc3ROYXZpZ2F0aW9u
KG5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpQnJlYWtwb2ludHMgPSB7fTsKKyAgICAg
ICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsID0gY3JlYXRlRGVidWdnZXJNb2RlbCgpOworICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlcihkZWJ1Z2dlck1vZGVsLCBzZXJpYWxpemVkQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRB
ZGRlZCwgYnJlYWtwb2ludFJlbW92ZWQpOworCisgICAgICAgICAgICBicmVha3BvaW50TWFuYWdl
ci51aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGVBKTsKKyAgICAgICAgICAgIHNldFRpbWVv
dXQobmF2aWdhdGVUb0IsIDApOworCisgICAgICAgICAgICBmdW5jdGlvbiBuYXZpZ2F0ZVRvQigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoxMDow
IjoiZm9vID09IGJhciJ9LCBkZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhKU09OLnN0cmluZ2lmeShzZXJpYWxpemVk
QnJlYWtwb2ludHMpLCBKU09OLnN0cmluZ2lmeShicmVha3BvaW50TWFuYWdlci5zZXJpYWxpemVC
cmVha3BvaW50cygpKSk7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiXG5OYXZpZ2F0ZSB0byBCLiIpOworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2Vy
LmRlYnVnZ2VyUmVzZXQoKTsKKworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLnVp
U291cmNlQ29kZUFkZGVkKHVpU291cmNlQ29kZUIpOworICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQobmF2aWdhdGVUb0EsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlv
biBuYXZpZ2F0ZVRvQSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1
YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0sIGRlYnVnZ2VyTW9k
ZWwuYnJlYWtwb2ludHMpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1
YWxzKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRCcmVha3BvaW50cyksIEpTT04uc3RyaW5naWZ5
KGJyZWFrcG9pbnRNYW5hZ2VyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkpKTsKKworICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcbk5hdmlnYXRlIGJhY2sgdG8gQS4iKTsK
KyAgICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci5kZWJ1Z2dlclJlc2V0KCk7CisKKyAg
ICAgICAgICAgICAgICB2YXIgZXZlbnREYXRhID0geyBicmVha3BvaW50SWQ6ICJhLmpzOjEwOjAi
LCBsb2NhdGlvbjogeyBzY3JpcHRJZDogImEuanMiLCBsaW5lTnVtYmVyOiAxMSwgY29sdW1uTnVt
YmVyOiA1IH19OworICAgICAgICAgICAgICAgIGRlYnVnZ2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVz
b2x2ZWQsIGV2ZW50RGF0YSk7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIudWlT
b3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlQSk7CisgICAgICAgICAgICAgICAgc2V0VGltZW91
dChjaGVja1Jlc3VsdHMsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlv
biBjaGVja1Jlc3VsdHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVx
dWFscyh7ImEuanM6MTA6MCI6ImZvbyA9PSBiYXIiLCJiLmpzOjM6MCI6IiJ9LCBkZWJ1Z2dlck1v
ZGVsLmJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiU2VyaWFsaXplZCBicmVha3BvaW50czogIiArIEpTT04uc3RyaW5naWZ5KGJyZWFrcG9pbnRN
YW5hZ2VyLnNlcmlhbGl6ZUJyZWFrcG9pbnRzKCkpKTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZvcm1h
dHRpbmcobmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9Owor
ICAgICAgICAgICAgdmFyIGRlYnVnZ2VyTW9kZWwgPSBjcmVhdGVEZWJ1Z2dlck1vZGVsKCk7Cisg
ICAgICAgICAgICB2YXIgYnJlYWtwb2ludE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyKGRlYnVnZ2VyTW9kZWwsIFtjcmVhdGVCcmVha3BvaW50KCJjLmpzIiwgNCwg
IiIsIHRydWUpXSwgYnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50UmVtb3ZlZCk7CisKKyAgICAg
ICAgICAgIHZhciB1aVNvdXJjZUNvZGVDID0geworICAgICAgICAgICAgICAgIGlkOiAiYy5qcyIs
CisgICAgICAgICAgICAgICAgdXJsOiAiYy5qcyIsCisgICAgICAgICAgICAgICAgcmF3U291cmNl
Q29kZTogeworICAgICAgICAgICAgICAgICAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVu
Y3Rpb24ocmF3TG9jYXRpb24pIHsgcmV0dXJuIHJhd0xvY2F0aW9uOyB9LAorICAgICAgICAgICAg
ICAgICAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29s
dW1uTnVtYmVyKSB7IHJldHVybiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07IH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZUNGb3JtYXR0ZWQg
PSB7CisgICAgICAgICAgICAgICAgaWQ6ICJkZW9iZnVzY2F0ZWQ6Yy5qcyIsCisgICAgICAgICAg
ICAgICAgdXJsOiAiYy5qcyIsCisgICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZTogeworICAg
ICAgICAgICAgICAgICAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9j
YXRpb24pIHsgcmV0dXJuIHsgbGluZU51bWJlcjogcmF3TG9jYXRpb24ubGluZU51bWJlciAqIDIs
IGNvbHVtbk51bWJlcjogcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyICogMiB9OyB9LAorICAgICAg
ICAgICAgICAgICAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKSB7IHJldHVybiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6
IE1hdGguZmxvb3IobGluZU51bWJlciAvIDIpLCBjb2x1bW5OdW1iZXI6IE1hdGguZmxvb3IoY29s
dW1uTnVtYmVyIC8gMikgfTsgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VD
b2RlQyk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZvcm1hdCwgMCk7CisKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGZvcm1hdCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0
RXF1YWxzKHsiYy5qczo0OjAiOiIifSwgZGVidWdnZXJNb2RlbC5icmVha3BvaW50cyk7CisgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoSlNPTi5zdHJpbmdpZnkoYnJlYWtw
b2ludE1hbmFnZXIuc2VyaWFsaXplQnJlYWtwb2ludHMoKSkpOworCisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlxuRm9ybWF0IHNvdXJjZS4iKTsKKyAgICAgICAgICAg
ICAgICBicmVha3BvaW50TWFuYWdlci5yZXNldCgpOworCisgICAgICAgICAgICAgICAgYnJlYWtw
b2ludE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlQ0Zvcm1hdHRlZCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludCh1aVNvdXJjZUNv
ZGVDRm9ybWF0dGVkLCA0LCAiIiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1h
bmFnZXIuc2V0QnJlYWtwb2ludCh1aVNvdXJjZUNvZGVDRm9ybWF0dGVkLCA4LCAiIiwgZmFsc2Up
OworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hhbmdlQnJlYWtwb2ludHMsIDApOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VCcmVha3BvaW50cygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYy5qczoyOjAiOiIi
fSwgZGVidWdnZXJNb2RlbC5icmVha3BvaW50cyk7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiXG5DaGFuZ2UgYnJlYWtwb2ludHMuIik7CisgICAgICAgICAgICAg
ICAgYnJlYWtwb2ludE1hbmFnZXIucmVtb3ZlQnJlYWtwb2ludCh1aVNvdXJjZUNvZGVDRm9ybWF0
dGVkLmlkLCA4KTsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci5zZXRCcmVha3Bv
aW50KHVpU291cmNlQ29kZUNGb3JtYXR0ZWQsIDEyLCAiIiwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgc2V0VGltZW91dChyZWxvYWQsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
dW5jdGlvbiByZWxvYWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVx
dWFscyh7ImMuanM6MjowIjoiIiwiYy5qczo2OjAiOiIifSwgZGVidWdnZXJNb2RlbC5icmVha3Bv
aW50cyk7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiXG5SZWxv
YWQuIik7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIuZGVidWdnZXJSZXNldCgp
OworCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQo
dWlTb3VyY2VDb2RlQ0Zvcm1hdHRlZCk7CisgICAgICAgICAgICAgICAgdmFyIGV2ZW50RGF0YSA9
IHsgYnJlYWtwb2ludElkOiAiYy5qczoyOjAiLCBsb2NhdGlvbjogeyBzY3JpcHRJZDogImMuanMi
LCBsaW5lTnVtYmVyOiAzLCBjb2x1bW5OdW1iZXI6IDAgfX07CisgICAgICAgICAgICAgICAgZGVi
dWdnZXJNb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgZXZlbnREYXRhKTsKKyAgICAgICAgICAg
ICAgICBldmVudERhdGEgPSB7IGJyZWFrcG9pbnRJZDogImMuanM6NjowIiwgbG9jYXRpb246IHsg
c2NyaXB0SWQ6ICJjLmpzIiwgbGluZU51bWJlcjogNiwgY29sdW1uTnVtYmVyOiAwIH19OworICAg
ICAgICAgICAgICAgIGRlYnVnZ2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIGV2ZW50RGF0
YSk7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVja1Jlc3VsdHMsIDApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImMuanM6MjowIjoiIiwiYy5qczo2
OjAiOiIifSwgZGVidWdnZXJNb2RlbC5icmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAgbmV4
dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXSk7CisKKyAgICBmdW5jdGlvbiBh
c3NlcnRFcXVhbHMobWFwMSwgbWFwMikKKyAgICB7CisgICAgICAgIGZvciAodmFyIHAgaW4gbWFw
MSkKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZShwIGluIG1hcDIsIHAgKyAi
IG5vdCBpbiBtYXAyIik7CisgICAgICAgIGZvciAodmFyIHAgaW4gbWFwMikKKyAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZShwIGluIG1hcDEsIHAgKyAiIG5vdCBpbiBtYXAxIik7
CisgICAgfQorfTsKKworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorPHA+VGVzdHMgQnJlYWtwb2ludE1hbmFnZXIgY2xhc3MuPC9wPgorCis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWZlZDQ1NjhmZTQyMGRkZGY3ZDU0ZGVkNDM4YWQ0ODc1
NWIzMGExNS4uMzE3YWIzNzFmZmJhMThiODA3M2FmZWRkNzlkMzYyMmMzMzhhNjhmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDExLTA4LTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rp
dmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgYnJl
YWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8gYSBzZXBhcmF0ZSBjbGFzcyBhbmQgYWRkIHRlc3Rz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyMjQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBp
bnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzOiBBZGRlZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnVpU291cmNlQ29kZUFkZGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYnJlYWtw
b2ludHNGb3JVSVNvdXJjZUNvZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9tYXRlcmlhbGl6ZUJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZS5fYnJlYWtwb2ludERlYnVnZ2VyTG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb1VJKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2RlbGV0ZUJy
ZWFrcG9pbnRGcm9tVUkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZS5fbW92ZUJyZWFrcG9pbnRJblVJKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fZm9yRWFjaEJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZS5fc2V0QnJlYWtwb2ludEluRGVidWdnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9icmVha3Bv
aW50UmVzb2x2ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZS5zZXJpYWxpemVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuZGVidWdnZXJSZXNldCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5w
cm90b3R5cGUuc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmRl
c2VyaWFsaXplKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuc2V0QnJl
YWtwb2ludEJ5U2NyaXB0TG9jYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlRmlsZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3Rv
dHlwZS5nZXQgcmF3U291cmNlQ29kZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6
CisKIDIwMTEtMDgtMTIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAg
ICAgICAgIE5vdCByZXZpZXdlZDogZm9sbG93IHVwIHRvIGluc3BlY3RvciB0ZXN0IGJyZWFrYWdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDhjNTQ1NTAxZTExOWQ1NDM2NmM1NTlkMzYyMTFjZGVlOWU0
ZTQ5ZDMuLmQ5YzkzODdhYzg0ZGYzMGQwZDNkNTYwMWQ2NzQxMWQyNDI0MDRmYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTYzMjIsNiArNjMyMiw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9CaW5hcnlTZWFyY2guanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90
dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ2hlY2tib3guanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1Yzc0NDZhODEwNGQ0NzliNGM1OWJjMjZkNjcyMzgw
YzE3YjU1ZDIyLi5hMTQxZTJiNTkxZWJmMDQzMDQ5NDE5ZjQ4MDY2N2FhNzQxMDBhNTYwIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjg2Nzcs
NiArNjg2NzcsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQnJlYWtwb2ludE1hbmFnZXIuanMiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTYwN2QzMmNiOGVlMjk4MWI1MmU2ZGVh
NTkwYzQ3OGIzNDUyOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpAQCAtMCwwICsxLDI2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1bmN0aW9uKGRlYnVnZ2VyTW9kZWwsIGJyZWFr
cG9pbnRzLCBicmVha3BvaW50QWRkZWREZWxlZ2F0ZSwgYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0
ZSkKK3sKKyAgICB0aGlzLl9icmVha3BvaW50QWRkZWREZWxlZ2F0ZSA9IGJyZWFrcG9pbnRBZGRl
ZERlbGVnYXRlOworICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUgPSBicmVha3Bv
aW50UmVtb3ZlZERlbGVnYXRlOworICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uID0g
e307CisKKyAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2RlbDsKKyAgICB0aGlz
Ll9icmVha3BvaW50c0J5RGVidWdnZXJJZCA9IHt9OworICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtw
b2ludFJlc29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQsIHRoaXMpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmRlc2VyaWFsaXplKGJyZWFrcG9p
bnRzW2ldKTsKKyAgICAgICAgaWYgKCF0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3Vy
Y2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpCisgICAgICAgICAgICB0aGlzLl9hZGRC
cmVha3BvaW50VG9VSShicmVha3BvaW50KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CisgICAgdWlTb3VyY2VDb2RlQWRkZWQ6IGZ1bmN0
aW9uKHVpU291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMu
X2JyZWFrcG9pbnRzKHVpU291cmNlQ29kZS5pZCk7CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1i
ZXIgaW4gYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtw
b2ludHNbbGluZU51bWJlcl07CisgICAgICAgICAgICB0aGlzLl9tYXRlcmlhbGl6ZUJyZWFrcG9p
bnQoYnJlYWtwb2ludCwgdWlTb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50
Ll9kZWJ1Z2dlckxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnREZWJ1
Z2dlckxvY2F0aW9uQ2hhbmdlZChicmVha3BvaW50LCBicmVha3BvaW50Ll9kZWJ1Z2dlckxvY2F0
aW9uKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBicmVha3BvaW50c0ZvclVJU291cmNlQ29k
ZTogZnVuY3Rpb24odWlTb3VyY2VDb2RlSWQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
YnJlYWtwb2ludHModWlTb3VyY2VDb2RlSWQpOworICAgIH0sCisKKyAgICBzZXRCcmVha3BvaW50
OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkK
KyAgICB7CisgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGlu
ZU51bWJlcikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHBlcnNpc3RlbnQg
PSAhIXVpU291cmNlQ29kZS51cmw7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlciwgY29uZGl0aW9u
LCBlbmFibGVkLCBwZXJzaXN0ZW50KTsKKyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvVUko
YnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuX21hdGVyaWFsaXplQnJlYWtwb2ludChicmVha3Bv
aW50LCB1aVNvdXJjZUNvZGUpOworICAgIH0sCisKKyAgICByZW1vdmVCcmVha3BvaW50OiBmdW5j
dGlvbih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBicmVh
a3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludCh1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcik7Cisg
ICAgICAgIGlmICghYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5fcmVt
b3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcihicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgX21h
dGVyaWFsaXplQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCwgdWlTb3VyY2VDb2RlKQor
ICAgIHsKKyAgICAgICAgYnJlYWtwb2ludC5fdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwor
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQuZW5hYmxlZCB8fCBicmVha3BvaW50Ll9kZWJ1Z2dlcklk
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHVpU291
cmNlQ29kZS5yYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKGJyZWFrcG9pbnQu
bGluZU51bWJlciwgMCk7CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRJbkRlYnVnZ2VyKGJy
ZWFrcG9pbnQsIHJhd0xvY2F0aW9uKTsKKyAgICB9LAorCisgICAgX2JyZWFrcG9pbnREZWJ1Z2dl
ckxvY2F0aW9uQ2hhbmdlZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlm
ICghYnJlYWtwb2ludC5fdWlTb3VyY2VDb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB2YXIgdWlMb2NhdGlvbiA9IGJyZWFrcG9pbnQuX3VpU291cmNlQ29kZS5yYXdTb3VyY2VDb2Rl
LnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGJyZWFrcG9pbnQuX2RlYnVnZ2VyTG9jYXRpb24pOwor
ICAgICAgICBpZiAodWlMb2NhdGlvbi5saW5lTnVtYmVyID09PSBicmVha3BvaW50LmxpbmVOdW1i
ZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLl9tb3ZlQnJlYWtw
b2ludEluVUkoYnJlYWtwb2ludCwgdWlMb2NhdGlvbi5saW5lTnVtYmVyKSkKKyAgICAgICAgICAg
IHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tRGVidWdnZXIoYnJlYWtwb2ludCk7CisgICAgfSwK
KworICAgIF9hZGRCcmVha3BvaW50VG9VSTogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3Vy
Y2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpOworICAgICAgICB0aGlzLl9icmVha3Bv
aW50cyhicmVha3BvaW50LnVpU291cmNlQ29kZUlkKVticmVha3BvaW50LmxpbmVOdW1iZXJdID0g
YnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkRGVsZWdhdGUoYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyLCBicmVha3BvaW50LmNv
bmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICB9LAorCisgICAgX2RlbGV0ZUJyZWFr
cG9pbnRGcm9tVUk6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIGJyZWFr
cG9pbnQubGluZU51bWJlcikgPT09IGJyZWFrcG9pbnQpOworICAgICAgICBkZWxldGUgdGhpcy5f
YnJlYWtwb2ludHMoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVt
YmVyXTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZShicmVha3BvaW50
LnVpU291cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBf
bW92ZUJyZWFrcG9pbnRJblVJOiBmdW5jdGlvbihicmVha3BvaW50LCBsaW5lTnVtYmVyKQorICAg
IHsKKyAgICAgICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsKKyAg
ICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgbGlu
ZU51bWJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrcG9pbnQu
bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1VJ
KGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgX2JyZWFr
cG9pbnRzOiBmdW5jdGlvbih1aVNvdXJjZUNvZGVJZCkKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdKQorICAgICAgICAgICAg
dGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdID0ge307CisgICAg
ICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvblt1aVNvdXJjZUNvZGVJZF07
CisgICAgfSwKKworICAgIF9icmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGVJZCwgbGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50cyh1aVNvdXJj
ZUNvZGVJZClbbGluZU51bWJlcl07CisgICAgfSwKKworICAgIF9mb3JFYWNoQnJlYWtwb2ludDog
ZnVuY3Rpb24oaGFuZGxlcikKKyAgICB7CisgICAgICAgIGZvciAodmFyIHVpU291cmNlQ29kZUlk
IGluIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uKSB7CisgICAgICAgICAgICB2YXIgYnJl
YWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvblt1aVNvdXJjZUNvZGVJZF07
CisgICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIGJyZWFrcG9pbnRzKQorICAgICAg
ICAgICAgICAgIGhhbmRsZXIoYnJlYWtwb2ludHNbbGluZU51bWJlcl0pOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIF9zZXRCcmVha3BvaW50SW5EZWJ1Z2dlcjogZnVuY3Rpb24oYnJlYWtwb2lu
dCwgcmF3TG9jYXRpb24pCisgICAgeworICAgICAgICBmdW5jdGlvbiBkaWRTZXRCcmVha3BvaW50
KGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnJl
YWtwb2ludCA9PT0gdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBi
cmVha3BvaW50LmxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50
SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShi
cmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRJ
ZCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3Bv
aW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c0J5RGVidWdnZXJJZFticmVha3BvaW50
SWRdID0gYnJlYWtwb2ludDsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQuX2RlYnVnZ2VySWQgPSBi
cmVha3BvaW50SWQ7CisgICAgICAgICAgICBicmVha3BvaW50Ll9kZWJ1Z2dlckxvY2F0aW9uID0g
bG9jYXRpb25zWzBdOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuX2RlYnVnZ2VyTG9jYXRp
b24pCisgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludERlYnVnZ2VyTG9jYXRpb25DaGFu
Z2VkKGJyZWFrcG9pbnQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludEJ5U2NyaXB0TG9jYXRpb24ocmF3TG9jYXRpb24sIGJyZWFrcG9pbnQuY29u
ZGl0aW9uLCBkaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfcmVt
b3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcjogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7Cisg
ICAgICAgIGlmICghKCJfZGVidWdnZXJJZCIgaW4gYnJlYWtwb2ludCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChicmVh
a3BvaW50Ll9kZWJ1Z2dlcklkKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzQnlE
ZWJ1Z2dlcklkW2JyZWFrcG9pbnQuX2RlYnVnZ2VySWRdOworICAgICAgICBkZWxldGUgYnJlYWtw
b2ludC5fZGVidWdnZXJJZDsKKyAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2RlYnVnZ2VyTG9j
YXRpb247CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c0J5RGVi
dWdnZXJJZFtldmVudC5kYXRhLmJyZWFrcG9pbnRJZF07CisgICAgICAgIGJyZWFrcG9pbnQuX2Rl
YnVnZ2VyTG9jYXRpb24gPSBldmVudC5kYXRhLmxvY2F0aW9uOworICAgICAgICB0aGlzLl9icmVh
a3BvaW50RGVidWdnZXJMb2NhdGlvbkNoYW5nZWQoYnJlYWtwb2ludCk7CisgICAgfSwKKworICAg
IHNlcmlhbGl6ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc2Vy
aWFsaXplZEJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZVBlcnNp
c3RlbnQoYnJlYWtwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQu
cGVyc2lzdGVudCkKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludHMucHVzaChi
cmVha3BvaW50LnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9mb3JFYWNo
QnJlYWtwb2ludChzZXJpYWxpemVQZXJzaXN0ZW50LmJpbmQodGhpcykpOworICAgICAgICByZXR1
cm4gc2VyaWFsaXplZEJyZWFrcG9pbnRzOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gcmVzZXRCcmVha3BvaW50KGJyZWFrcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50Ll91aVNvdXJjZUNvZGU7Cisg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbURlYnVnZ2VyKGJyZWFrcG9pbnQp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2ZvckVhY2hCcmVha3BvaW50KHJlc2V0QnJlYWtw
b2ludC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgZGVidWdnZXJSZXNldDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gcmVzZXRPckRlbGV0ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQucGVyc2lzdGVudCkg
eworICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50Ll91aVNvdXJjZUNvZGU7CisgICAg
ICAgICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2RlYnVnZ2VyTG9jYXRpb247CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9t
VUkoYnJlYWtwb2ludCk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRz
QnlEZWJ1Z2dlcklkW2JyZWFrcG9pbnQuX2RlYnVnZ2VySWRdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2ZvckVhY2hCcmVha3BvaW50KHJlc2V0T3JEZWxldGVCcmVh
a3BvaW50LmJpbmQodGhpcykpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQg
PSBmdW5jdGlvbih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVk
LCBwZXJzaXN0ZW50KQoreworICAgIHRoaXMudWlTb3VyY2VDb2RlSWQgPSB1aVNvdXJjZUNvZGVJ
ZDsKKyAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgIHRoaXMuY29uZGl0aW9u
ID0gY29uZGl0aW9uOworICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgdGhpcy5wZXJz
aXN0ZW50ID0gcGVyc2lzdGVudDsKK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90
eXBlID0geworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNl
cmlhbGl6ZWRCcmVha3BvaW50ID0ge307CisgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LnNv
dXJjZUZpbGVJZCA9IHRoaXMudWlTb3VyY2VDb2RlSWQ7CisgICAgICAgIHNlcmlhbGl6ZWRCcmVh
a3BvaW50LmxpbmVOdW1iZXIgPSB0aGlzLmxpbmVOdW1iZXI7CisgICAgICAgIHNlcmlhbGl6ZWRC
cmVha3BvaW50LmNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uOworICAgICAgICBzZXJpYWxpemVk
QnJlYWtwb2ludC5lbmFibGVkID0gdGhpcy5lbmFibGVkOworICAgICAgICByZXR1cm4gc2VyaWFs
aXplZEJyZWFrcG9pbnQ7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5kZXNl
cmlhbGl6ZSA9IGZ1bmN0aW9uKHNlcmlhbGl6ZWRCcmVha3BvaW50KQoreworICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQoCisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtw
b2ludC5zb3VyY2VGaWxlSWQsCisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5saW5l
TnVtYmVyLAorICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQuY29uZGl0aW9uLAorICAg
ICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQuZW5hYmxlZCwKKyAgICAgICAgICAgIHRydWUp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1
Z2dlck1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dl
ck1vZGVsLmpzCmluZGV4IDdhNTJiOTFkNDgxY2Q4NmY4MzhlYjFmZGEwMzM0NWMwM2RhNmUyOWQu
LjFkOTdlNmUxYTJmZTBkMTAyZmY5YTY5MGZhNzA3Yjk2ODczMzc5ZmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKQEAgLTcz
LDYgKzczLDE1IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgRGVidWdnZXJBZ2VudC5jb250aW51ZVRvTG9jYXRpb24obG9jYXRpb24pOwogICAgIH0s
CiAKKyAgICBzZXRCcmVha3BvaW50QnlTY3JpcHRMb2NhdGlvbjogZnVuY3Rpb24obG9jYXRpb24s
IGNvbmRpdGlvbiwgY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5z
Y3JpcHRGb3JTb3VyY2VJRChsb2NhdGlvbi5zY3JpcHRJZCk7CisgICAgICAgIGlmIChzY3JpcHQu
c291cmNlVVJMKQorICAgICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50KHNjcmlwdC5zb3VyY2VV
UkwsIGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJlciwgY29uZGl0aW9u
LCBjYWxsYmFjayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuc2V0QnJlYWtwb2lu
dEJ5U291cmNlSWQobG9jYXRpb24sIGNvbmRpdGlvbiwgY2FsbGJhY2spOworICAgIH0sCisKICAg
ICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
Y29uZGl0aW9uLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIEFkanVzdCBjb2x1bW4gaWYg
bmVlZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
b3VyY2VGaWxlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
aWxlLmpzCmluZGV4IGZiYjk1MDEzMGVjNjBiZGU5YTYzNGIyNGY2YWQwM2Q1YTE3NTNhYjcuLmY4
OGZlYmQzM2NhOTc1YzhlOTk1NDY0YTQ4NGZkMzQwMGYxNWY0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRmlsZS5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZpbGUuanMKQEAgLTY2LDYgKzY2LDEy
IEBAIFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgfSwKIAorICAgIGdldCByYXdTb3VyY2VDb2RlKCkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBleHRyYWN0IFVJU291cmNlQ29kZSBmcm9tIFJhd1NvdXJjZUNvZGUgKGN1
cnJlbnRseSBSYXdTb3VyY2VDb2RlIGltcGxlbWVudHMgbWV0aG9kcyBmcm9tIGJvdGggaW50ZXJm
YWNlcykuCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKICAgICByYXdMb2NhdGlvblRv
VUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAgICAgICB2YXIgdWlM
b2NhdGlvbiA9IHRoaXMuX21hcHBpbmcgPyB0aGlzLl9tYXBwaW5nLm9yaWdpbmFsVG9Gb3JtYXR0
ZWQocmF3TG9jYXRpb24pIDogcmF3TG9jYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNjFhZTY4MDdiMzY3N2YxYjI3Mjc5ZTZiMWFj
YWI1NzY0N2RkNDdmMC4uNzkxZjc0NjM2MjYyZTcwOWQxYTMyNDk4YTAwNTI0NjZlZTM5ZDY5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAt
MTAsNiArMTAsNyBAQAogICAgIDxmaWxlPkF1ZGl0c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxl
PkJpbmFyeVNlYXJjaC5qczwvZmlsZT4KICAgICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3Jp
ZFRyZWUuanM8L2ZpbGU+CisgICAgPGZpbGU+QnJlYWtwb2ludE1hbmFnZXIuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DYWxs
U3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DaGVja2JveC5qczwvZmlsZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
Lmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CmluZGV4IGE3ODk2MGFmYjc2NjA5ZjY4MzUxODE4YTRmMDU5OGFkYTAzYjIzNGQuLmU3MWQ3ODc5
MTg3NGFiYWI3OTIyYTk4NjJkYTNmYWJjN2NmNmY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMTU0LDYgKzE1NCw3IEBA
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGV0YWls
ZWRIZWFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkRlYnVnZ2VyTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9p
bnRNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJTb3VyY2VGaWxlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJET01BZ2VudC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGltZWxpbmVBZ2VudC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="100108"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>