<?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>89391</bug_id>
          
          <creation_ts>2012-06-18 15:18:21 -0700</creation_ts>
          <short_desc>Would like a way to force a clean build</short_desc>
          <delta_ts>2016-03-18 10:01:45 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>123559</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Lucas Forschler">lforschler</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>jhawn</cc>
    
    <cc>mrowe</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>651796</commentid>
    <comment_count>0</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2012-06-18 15:18:21 -0700</bug_when>
    <thetext>Occasionally we run into issues where we need to force a clean buildbot.  Currently, we do this manually.
It would be great to have an option to force a clean build on any machine.  

I can think of a couple ways to do this, but ideally it would in a way that makes maintenance easy and avoids a buildmaster restart when things are changed.

One way this could be done is to add a Clean Factory.  This factory would call out to a script which would do the work of cleaning the build.  (this could involve several steps, and would probably differ based on OS/platform/Botconfig , and where the bot lived).  The script would live in ./Tools/OpenSource/Scripts.

It would be great to have a button on the bot page which would force a clean build ASAP.  (putting it ahead of any other builds in the queue)
This button would need some kind of authz.

If we choose not to use a button on the buildbot page, we&apos;d need some way to trigger the bot to be cleaned.  This could work by checking for the existence of a &apos;please-clean-me&apos; file, strategically placed on the file system somewhere.  Bot Admins would have to do the work to place this file in the right place.  Everytime the bot ran, it would check for this file, and act appropriately.  

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651798</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-18 15:19:50 -0700</bug_when>
    <thetext>We should just add a button.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652974</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 16:46:14 -0700</bug_when>
    <thetext>There used to be a button.  It was removed long ago due to spam-bot abuse, iirc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652987</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-19 16:53:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; There used to be a button.  It was removed long ago due to spam-bot abuse, iirc?

I don&apos;t think this will be an issue now that we have authentication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652991</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-06-19 16:54:59 -0700</bug_when>
    <thetext>There used to be a force build button that could be abused to make a clean build happen by telling Buildbot to build a branch or revision that didn&apos;t exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652998</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 16:59:22 -0700</bug_when>
    <thetext>My current solution to forcing a clean build is to force a build, and then immediately abort it while it&apos;s in the &quot;svn&quot; step.  That leaves an svn lock around, if you then force a second build, it will fail to svn up, and buildbot will automatically nuke the client directory from orbit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670428</commentid>
    <comment_count>6</comment_count>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-16 10:24:22 -0700</bug_when>
    <thetext>I&apos;ve come up with a working solution for this, though it required a change to my buildbot installation.

A &quot;Clean Build&quot; button was be added to the builders/$buildername page, with one button adjacent to all of the listed buildslaves.
This button acts much like the &quot;Force Build&quot; button, except that it schedules a build only on the slave that was specified, rather than any available slave for this builder.

I&apos;ve created a new type of scheduler called a CleanScheduler, and (like ForceScheduler) the button is only available for builders that are given to this scheduler.

Because the new build request is for a specific slave, I needed to add a new attribute to build requests currently called clean_slavename. It is None by default, but is set to the name of the slave that is to be cleaned when the build request is caused by pressing the &quot;Clean Build&quot; button.
I added a new file to db migrations to add this column to the buildrequests table.

These build requests are given highest priority and are guaranteed to run only on the slave that was specified.

Because the clean steps are different than the normal build steps, the builder must be given a separate &quot;clean_factory&quot; object which will send the steps to the remote slave to clean the build directory for that builder.

Here&apos;s an excerpt from an example config file:

...
# create a Clean Scheduler with a list of builders that may need cleaning.
c[&apos;schedulers&apos;].append(CleanScheduler(name=&quot;clean&quot;, builderNames=[&quot;builder1&quot;]))

...
# make the usual build factory, and a clean factory with the steps for performing a clean.
factory = BuildFactory()
factory.addStep(ShellCommand(command=[&quot;make&quot;, &quot;debug&quot;]))

clean_factory = BuildFactory()
clean_factory.addStep(ShellCommand(command=[&quot;make&quot;, &quot;clean&quot;]))

...
# add builders, making sure that the builders listed in the clean scheduler have a &apos;clean_factory&apos; specified.
# notice how &quot;builder1&quot; has a clean factory because it was listed in the clean scheduler, but &quot;builder2&quot; does not.
c[&apos;builders&apos;].append(
    BuilderConfig(name=&quot;builder1&quot;,
      slavenames=[&quot;slave1&quot;, &quot;slave2&quot;, &quot;slave3&quot;, &quot;slave4&quot;],
      factory=factory,
      clean_factory=clean_factory))
c[&apos;builders&apos;].append(
    BuilderConfig(name=&quot;builder2&quot;,
      slavenames=[&quot;slave3&quot;, &quot;slave4&quot;, &quot;slave5&quot;],
      factory=factory))

...
# make sure that only authorized users can use the new button, notice the new &apos;cleanBuild&apos; keyword argument
authz_cfg=authz.Authz(
    # change any of these to True to enable; see the manual for more
    # options
    auth=auth.BasicAuth([(&quot;username&quot;, &quot;password&quot;)]),
    gracefulShutdown = False,
    forceBuild = &apos;auth&apos;,
    cleanBuild = &apos;auth&apos;, # the &apos;clean&apos; button should appear on the builders page
    forceAllBuilds = False,
    pingBuilder = False,
    stopBuild = False,
    stopAllBuilds = False,
    cancelPendingBuild = False,
)
c[&apos;status&apos;].append(html.WebStatus(http_port=8010, authz=authz_cfg))

I&apos;ll attach a diff off all of the changes I made to buildbot as well. I know it&apos;s probably not the best design yet, so let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670430</commentid>
    <comment_count>7</comment_count>
      <attachid>152557</attachid>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-16 10:25:21 -0700</bug_when>
    <thetext>Created attachment 152557
Changes to buildbot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670781</commentid>
    <comment_count>8</comment_count>
      <attachid>152643</attachid>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-16 16:53:34 -0700</bug_when>
    <thetext>Created attachment 152643
DB migration script

Add this file to buildbot/db/migrate/versions/ so that the buildrequests table has the clean_slavename column</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672669</commentid>
    <comment_count>9</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2012-07-18 13:04:37 -0700</bug_when>
    <thetext>Ryosuke, Ojan or Eric, do you have any thoughts on this implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672683</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-18 13:16:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Because the new build request is for a specific slave, I needed to add a new attribute to build requests currently called clean_slavename. It is None by default, but is set to the name of the slave that is to be cleaned when the build request is caused by pressing the &quot;Clean Build&quot; button.
&gt; I added a new file to db migrations to add this column to the buildrequests table.
&gt; 

Is there some reason that this information isn&apos;t stored in the properties dictionary of the build set rather than adding a new column to the build request in the database?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672767</commentid>
    <comment_count>11</comment_count>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-18 14:34:50 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; Is there some reason that this information isn&apos;t stored in the properties dictionary of the build set rather than adding a new column to the build request in the database?

I hadn&apos;t considered using buildset properties to store this information.

Currently, buildbot gets the buildset properties from the database only after already deciding which slave to use, but I could reorder it so that I check properties of a build request first. I&apos;ll work on changing this.

Please let me know any other thoughts you have about my changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672773</commentid>
    <comment_count>12</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-18 14:37:27 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ryosuke, Ojan or Eric, do you have any thoughts on this implementation?

I don&apos;t know the buildbot code at all. So, no. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673745</commentid>
    <comment_count>13</comment_count>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-19 11:53:04 -0700</bug_when>
    <thetext>Okay, I&apos;ve got a new plan!

Forget all of the above changes to Buildbot.

The way that a Builder currently chooses which build to start is by picking a slavebuilder and build requests from a list of available slaves and a list of build requests.

First, it chooses which slavebuilder to use. Users can currently customize how they want to choose builders by specifying a &apos;nextSlave&apos; function in their configuration for a builder. It defaults to using random.choice to pick any of the available slaves.

Then (only after choosing the slave) it chooses which build request to use. Users can also customize which build request is chosen by specifying a &apos;nextBuild&apos; function in their configuration for a builder. It defaults to using the earliest submitted request.

Finally, (after choosing the slave and build request) it tries to merge build requests to submit for one build. Users can even customize this by specifying a &apos;mergeRequests&apos; function in their configuration for a builder! It defaults to merging builds with compatible source stamps (check the code/documentation for the details).

The issue here is that we would like to be able to do all three of these things at once: choose a slave, build request, and merge compatible requests.

When we have a build request to clean a slave, we need to choose the request first so that we know which slave to choose (if available). The current implementation doesn&apos;t allow that (it chooses build requests independently from choosing the slave, and only after choosing the slave).

So, I propose a simple (much simpler than my last suggestion) change to Buildbot Builder configurations. A configuration option called &quot;chooseSlaveAndMergeBuildRequests&quot;. It is the combination of the currently available options: &quot;nextSlave&quot;, &quot;nextBuild&quot;, and &quot;mergeRequests&quot;.

The &quot;chooseSlaveAndMergeBuildRequests&quot; function will take two arguments: a list of available slavebuilders and a list of buildrequest objects. It will return a tuple of (selected_slavebuilder, [buildrequest, ...]) which is a single chosen slavebuilder and a list of build requests to be merged. You can still implement the logic of your &quot;nextSlave&quot;, &quot;nextBuild&quot; and &quot;mergeRequests&quot; configuration inside this function, but now it gives you more control to choose build requests that depend on a particular slavebuilder.

This will allow us to inspect the properties of a build request to see if it was scheduled by a certain &apos;clean&apos; scheduler! Another property set by the scheduler will specify the &apos;clean_slavename&apos;, and we can choose that slave if it is available. We can also merge &apos;clean&apos; requests for the same buildslave.

Now, about getting that &quot;Clean&quot; button on the builder page...

The clean button can be implemented as a simple ForceScheduler that sets a property for which slave to clean.
Normally, ForceScheduler buttons are listed separately on the page, but we want them listed in the &quot;Buildslaves&quot; section of the page.
We&apos;ve always been able to customize templates for pages, so we just need to customize the &quot;builder.html&quot; template to put the form for the clean scheduler in the right place. Customizing the &quot;forms.html&quot; template is also possible, so we can make a macro for &quot;clean_scheduler(url, scheduler, slavename)&quot; that just places a button on the page that submits a form to force a build with the &apos;clean_slavename&apos; property set to the given slavename.

Oh, no, but we still need a different set of steps for this &quot;clean&quot; build!

That can be easily taken care of in a user&apos;s configuration as well! 

Each &apos;BuildFactory&apos; instance has a method called &apos;newBuild&apos; which takes a list of BuildRequest objects and returns a new &apos;Build&apos; object that has all of the steps needed to complete the build.
Users can override this method in a subclass of &apos;BuildFactory&apos; and check the properties of the BuildRequest objects to see if they came from the &apos;clean&apos; scheduler. It can then return a Build object that has been instantiated with a different set of &apos;clean steps&apos; instead of the normal build steps. A user would have to specify these &apos;clean steps&apos; in the configuration.

I&apos;ve got all of these changes applied on a test master I&apos;m running, and it provides all of the features of my last proposed change, but with minimal changes to Buildbot itself and most changes done in the master.cfg file.

Now there&apos;s no need to add new columns to database tables, or have separate factories for each Builder! The &quot;chooseSlaveAndMergeBuildRequests&quot; builder config option allows for more control, and everything else is done in master.cfg and custom templates!

Let me know what you guys think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673784</commentid>
    <comment_count>14</comment_count>
      <attachid>153320</attachid>
    <who name="Josh Hawn">jhawn</who>
    <bug_when>2012-07-19 12:30:33 -0700</bug_when>
    <thetext>Created attachment 153320
Changes to Buildbot (Take 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176198</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-18 10:01:45 -0700</bug_when>
    <thetext>already fixed 2.5 years ago - http://trac.webkit.org/changeset/158393

*** This bug has been marked as a duplicate of bug 123559 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152557</attachid>
            <date>2012-07-16 10:25:21 -0700</date>
            <delta_ts>2012-07-19 12:30:33 -0700</delta_ts>
            <desc>Changes to buildbot</desc>
            <filename>buildbot.diff</filename>
            <type>text/plain</type>
            <size>16790</size>
            <attacher name="Josh Hawn">jhawn</attacher>
            
              <data encoding="base64">ZGlmZiAtYnVyIG9sZF9idWlsZGJvdC9jb25maWcucHkgbmV3X2J1aWxkYm90L2NvbmZpZy5weQot
LS0gb2xkX2J1aWxkYm90L2NvbmZpZy5weQkyMDEyLTAzLTI1IDE3OjA5OjEwLjAwMDAwMDAwMCAt
MDcwMAorKysgbmV3X2J1aWxkYm90L2NvbmZpZy5weQkyMDEyLTA3LTEzIDE2OjA0OjQ3LjAwMDAw
MDAwMCAtMDcwMApAQCAtNTk0LDggKzU5NCw4IEBACiBjbGFzcyBCdWlsZGVyQ29uZmlnOgogCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9uZSwgc2xhdmVuYW1lPU5vbmUsIHNsYXZlbmFt
ZXM9Tm9uZSwKLSAgICAgICAgICAgIGJ1aWxkZGlyPU5vbmUsIHNsYXZlYnVpbGRkaXI9Tm9uZSwg
ZmFjdG9yeT1Ob25lLCBjYXRlZ29yeT1Ob25lLAotICAgICAgICAgICAgbmV4dFNsYXZlPU5vbmUs
IG5leHRCdWlsZD1Ob25lLCBsb2Nrcz1Ob25lLCBlbnY9Tm9uZSwKKyAgICAgICAgICAgIGJ1aWxk
ZGlyPU5vbmUsIHNsYXZlYnVpbGRkaXI9Tm9uZSwgZmFjdG9yeT1Ob25lLCBjbGVhbl9mYWN0b3J5
PU5vbmUsCisgICAgICAgICAgICBjYXRlZ29yeT1Ob25lLCBuZXh0U2xhdmU9Tm9uZSwgbmV4dEJ1
aWxkPU5vbmUsIGxvY2tzPU5vbmUsIGVudj1Ob25lLAogICAgICAgICAgICAgcHJvcGVydGllcz1O
b25lLCBtZXJnZVJlcXVlc3RzPU5vbmUpOgogCiAgICAgICAgIGVycm9ycyA9IENvbmZpZ0Vycm9y
cyhbXSkKQEAgLTY1Miw2ICs2NTIsOCBAQAogICAgICAgICAgICAgZXJyb3JzLmFkZEVycm9yKAog
ICAgICAgICAgICAgICAgICJidWlsZGVyICclcyc6IGNhdGVnb3J5IG11c3QgYmUgYSBzdHJpbmci
ICUgKG5hbWUsKSkKIAorICAgICAgICBzZWxmLmNsZWFuX2ZhY3RvcnkgPSBjbGVhbl9mYWN0b3J5
CisKICAgICAgICAgc2VsZi5jYXRlZ29yeSA9IGNhdGVnb3J5IG9yICcnCiAgICAgICAgIHNlbGYu
bmV4dFNsYXZlID0gbmV4dFNsYXZlCiAgICAgICAgIGlmIG5leHRTbGF2ZSBhbmQgbm90IGNhbGxh
YmxlKG5leHRTbGF2ZSk6CkBAIC02NzcsNiArNjc5LDcgQEAKICAgICAgICAgICAgICduYW1lJzog
c2VsZi5uYW1lLAogICAgICAgICAgICAgJ3NsYXZlbmFtZXMnOiBzZWxmLnNsYXZlbmFtZXMsCiAg
ICAgICAgICAgICAnZmFjdG9yeSc6IHNlbGYuZmFjdG9yeSwKKyAgICAgICAgICAgICdjbGVhbl9m
YWN0b3J5Jzogc2VsZi5jbGVhbl9mYWN0b3J5LAogICAgICAgICAgICAgJ2J1aWxkZGlyJzogc2Vs
Zi5idWlsZGRpciwKICAgICAgICAgICAgICdzbGF2ZWJ1aWxkZGlyJzogc2VsZi5zbGF2ZWJ1aWxk
ZGlyLAogICAgICAgICB9CmRpZmYgLWJ1ciBvbGRfYnVpbGRib3QvZGIvYnVpbGRyZXF1ZXN0cy5w
eSBuZXdfYnVpbGRib3QvZGIvYnVpbGRyZXF1ZXN0cy5weQotLS0gb2xkX2J1aWxkYm90L2RiL2J1
aWxkcmVxdWVzdHMucHkJMjAxMi0wMy0yNCAxMzoyMzozMi4wMDAwMDAwMDAgLTA3MDAKKysrIG5l
d19idWlsZGJvdC9kYi9idWlsZHJlcXVlc3RzLnB5CTIwMTItMDctMTMgMTY6MDQ6NDcuMDAwMDAw
MDAwIC0wNzAwCkBAIC0yNjIsNCArMjYyLDUgQEAKICAgICAgICAgICAgICAgICBidWlsZGVybmFt
ZT1yb3cuYnVpbGRlcm5hbWUsIHByaW9yaXR5PXJvdy5wcmlvcml0eSwKICAgICAgICAgICAgICAg
ICBjbGFpbWVkPWNsYWltZWQsIGNsYWltZWRfYXQ9Y2xhaW1lZF9hdCwgbWluZT1taW5lLAogICAg
ICAgICAgICAgICAgIGNvbXBsZXRlPWJvb2wocm93LmNvbXBsZXRlKSwgcmVzdWx0cz1yb3cucmVz
dWx0cywKLSAgICAgICAgICAgICAgICBzdWJtaXR0ZWRfYXQ9c3VibWl0dGVkX2F0LCBjb21wbGV0
ZV9hdD1jb21wbGV0ZV9hdCkKKyAgICAgICAgICAgICAgICBzdWJtaXR0ZWRfYXQ9c3VibWl0dGVk
X2F0LCBjb21wbGV0ZV9hdD1jb21wbGV0ZV9hdCwKKyAgICAgICAgICAgICAgICBjbGVhbl9zbGF2
ZW5hbWU9cm93LmNsZWFuX3NsYXZlbmFtZSkKZGlmZiAtYnVyIG9sZF9idWlsZGJvdC9kYi9idWls
ZHNldHMucHkgbmV3X2J1aWxkYm90L2RiL2J1aWxkc2V0cy5weQotLS0gb2xkX2J1aWxkYm90L2Ri
L2J1aWxkc2V0cy5weQkyMDEyLTAzLTI1IDExOjA4OjE4LjAwMDAwMDAwMCAtMDcwMAorKysgbmV3
X2J1aWxkYm90L2RiL2J1aWxkc2V0cy5weQkyMDEyLTA3LTEzIDE2OjA0OjQ3LjAwMDAwMDAwMCAt
MDcwMApAQCAtMzAsNyArMzAsNyBAQAogICAgICMgRG9jdW1lbnRhdGlvbiBpcyBpbiBkZXZlbG9w
ZXIvZGF0YWJhc2UucnN0CiAKICAgICBkZWYgYWRkQnVpbGRzZXQoc2VsZiwgc291cmNlc3RhbXBz
ZXRpZCwgcmVhc29uLCBwcm9wZXJ0aWVzLCBidWlsZGVyTmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgZXh0ZXJuYWxfaWRzdHJpbmc9Tm9uZSwgX3JlYWN0b3I9cmVhY3Rvcik6CisgICAgICAgICAg
ICAgICAgICAgZXh0ZXJuYWxfaWRzdHJpbmc9Tm9uZSwgX3JlYWN0b3I9cmVhY3RvciwgY2xlYW5T
bGF2ZU5hbWU9Tm9uZSk6CiAgICAgICAgIGRlZiB0aGQoY29ubik6CiAgICAgICAgICAgICBidWls
ZHNldHNfdGJsID0gc2VsZi5kYi5tb2RlbC5idWlsZHNldHMKICAgICAgICAgICAgIHN1Ym1pdHRl
ZF9hdCA9IF9yZWFjdG9yLnNlY29uZHMoKQpAQCAtNzcsNyArNzcsOCBAQAogICAgICAgICAgICAg
ICAgICAgICBkaWN0KGJ1aWxkc2V0aWQ9YnNpZCwgYnVpbGRlcm5hbWU9YnVpbGRlcm5hbWUsIHBy
aW9yaXR5PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbWVkX2F0PTAsIGNsYWltZWRf
YnlfbmFtZT1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2xhaW1lZF9ieV9pbmNhcm5h
dGlvbj1Ob25lLCBjb21wbGV0ZT0wLCByZXN1bHRzPS0xLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VibWl0dGVkX2F0PXN1Ym1pdHRlZF9hdCwgY29tcGxldGVfYXQ9Tm9uZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJtaXR0ZWRfYXQ9c3VibWl0dGVkX2F0LCBjb21wbGV0ZV9hdD1O
b25lLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5fc2xhdmVuYW1lPWNsZWFuU2xhdmVO
YW1lKSkKIAogICAgICAgICAgICAgICAgIGJyaWRzW2J1aWxkZXJuYW1lXSA9IHIuaW5zZXJ0ZWRf
cHJpbWFyeV9rZXlbMF0KCk9ubHkgaW4gbmV3X2J1aWxkYm90L2RiL21pZ3JhdGUvdmVyc2lvbnM6
IDAyMl9hZGRfYnVpbGRyZXF1ZXN0c19jbGVhbl9zbGF2ZW5hbWVfY29sdW1uLnB5CmRpZmYgLWJ1
ciBvbGRfYnVpbGRib3QvZGIvbW9kZWwucHkgbmV3X2J1aWxkYm90L2RiL21vZGVsLnB5Ci0tLSBv
bGRfYnVpbGRib3QvZGIvbW9kZWwucHkJMjAxMi0wMy0yNSAxNzowOToxMC4wMDAwMDAwMDAgLTA3
MDAKKysrIG5ld19idWlsZGJvdC9kYi9tb2RlbC5weQkyMDEyLTA3LTEzIDE2OjA0OjQ3LjAwMDAw
MDAwMCAtMDcwMApAQCAtNzIsNiArNzIsOSBAQAogCiAgICAgICAgICMgdGltZSB0aGUgYnVpbGRy
ZXF1ZXN0IHdhcyBjb21wbGV0ZWQsIG9yIE5VTEwKICAgICAgICAgc2EuQ29sdW1uKCdjb21wbGV0
ZV9hdCcsIHNhLkludGVnZXIpLAorCisgICAgICAgICMgbmFtZSBvZiB0aGUgc2xhdmUgZm9yIHRo
ZSBidWlsZCBjbGVhbiByZXF1ZXN0LCBvciBOVUxMCisgICAgICAgIHNhLkNvbHVtbignY2xlYW5f
c2xhdmVuYW1lJywgc2EuU3RyaW5nKGxlbmd0aD0yNTYpKSwKICAgICApCiAKICAgICAjIEVhY2gg
cm93IGluIHRoaXMgdGFibGUgcmVwcmVzZW50cyBhIGNsYWltZWQgYnVpbGQgcmVxdWVzdCwgd2hl
cmUgdGhlCmRpZmYgLWJ1ciBvbGRfYnVpbGRib3QvcHJvY2Vzcy9idWlsZGVyLnB5IG5ld19idWls
ZGJvdC9wcm9jZXNzL2J1aWxkZXIucHkKLS0tIG9sZF9idWlsZGJvdC9wcm9jZXNzL2J1aWxkZXIu
cHkJMjAxMi0wMy0yNSAxNzowOToxMC4wMDAwMDAwMDAgLTA3MDAKKysrIG5ld19idWlsZGJvdC9w
cm9jZXNzL2J1aWxkZXIucHkJMjAxMi0wNy0xMyAxNjowNDo0Ny4wMDAwMDAwMDAgLTA3MDAKQEAg
LTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgc2VsZi5idWlsZGVyX3N0YXR1cy5zZXRCaWdT
dGF0ZSgiaWRsZSIpCiAKICAgICBAZGVmZXIuZGVmZXJyZWRHZW5lcmF0b3IKLSAgICBkZWYgX3N0
YXJ0QnVpbGRGb3Ioc2VsZiwgc2xhdmVidWlsZGVyLCBidWlsZHJlcXVlc3RzKToKKyAgICBkZWYg
X3N0YXJ0QnVpbGRGb3Ioc2VsZiwgc2xhdmVidWlsZGVyLCBidWlsZHJlcXVlc3RzLCB1c2VfY2xl
YW5fZmFjdG9yeT1GYWxzZSk6CiAgICAgICAgICIiIlN0YXJ0IGEgYnVpbGQgb24gdGhlIGdpdmVu
IHNsYXZlLgogICAgICAgICBAcGFyYW0gYnVpbGQ6IHRoZSBMe2Jhc2UuQnVpbGR9IHRvIHN0YXJ0
CiAgICAgICAgIEBwYXJhbSBzYjogdGhlIEx7U2xhdmVCdWlsZGVyfSB3aGljaCB3aWxsIGhvc3Qg
dGhpcyBidWlsZApAQCAtMjcwLDcgKzI3MCwxMSBAQAogICAgICAgICAjIHN0YXR1cyBiYXNlZCBv
biBhbnkgb3RoZXIgY2xlYW51cAogICAgICAgICBjbGVhbnVwcy5hcHBlbmQobGFtYmRhIDogc2Vs
Zi51cGRhdGVCaWdTdGF0dXMoKSkKIAorICAgICAgICBpZiB1c2VfY2xlYW5fZmFjdG9yeToKKyAg
ICAgICAgICAgIGJ1aWxkID0gc2VsZi5jb25maWcuY2xlYW5fZmFjdG9yeS5uZXdCdWlsZChidWls
ZHJlcXVlc3RzKQorICAgICAgICBlbHNlOgogICAgICAgICBidWlsZCA9IHNlbGYuY29uZmlnLmZh
Y3RvcnkubmV3QnVpbGQoYnVpbGRyZXF1ZXN0cykKKwogICAgICAgICBidWlsZC5zZXRCdWlsZGVy
KHNlbGYpCiAgICAgICAgIGxvZy5tc2coInN0YXJ0aW5nIGJ1aWxkICVzIHVzaW5nIHNsYXZlICVz
IiAlIChidWlsZCwgc2xhdmVidWlsZGVyKSkKIApAQCAtNDg1LDYgKzQ4OSw2NSBAQAogICAgICAg
ICB5aWVsZCB3ZmQKICAgICAgICAgdW5jbGFpbWVkX3JlcXVlc3RzID0gd2ZkLmdldFJlc3VsdCgp
CiAKKyAgICAgICAgbG9nLm1zZygiTWF5YmUgc3RhcnRpbmcgYnVpbGRzISIpCisKKyAgICAgICAg
IyBoYW5kbGUgY2xlYW5fc2xhdmUgcmVxdWVzdHMgZmlyc3QKKyAgICAgICAgIyBUT0RPOiB0aGlz
IGRvZXNuJ3QgZG8gdGhlIHNhbWUgZXJyb3IgY2hlY2tpbmcgYXMgYmVmb3JlLAorICAgICAgICAj
ICAgICAgIHVwZGF0ZSBpdCBzbyB0aGF0IGl0IGRvZXMsIG9yIHJld29yayBpdCBpbnRvIHRoZSBs
b29wIGJlbG93CisKKyAgICAgICAgY2xlYW5fc2xhdmVfcmVxdWVzdHMgPSBbYnJkaWN0IGZvciBi
cmRpY3QgaW4gdW5jbGFpbWVkX3JlcXVlc3RzIGlmIGJyZGljdFsnY2xlYW5fc2xhdmVuYW1lJ11d
CisKKyAgICAgICAgbG9nLm1zZygiY2xlYW4gc2xhdmUgcmVxdWVzdHM6ICVzIiAlIGNsZWFuX3Ns
YXZlX3JlcXVlc3RzKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZy5jbGVhbl9mYWN0b3J5
OgorICAgICAgICAgICAgbG9nLm1zZygiVGhlcmUgaXMgbm8gY2xlYW5fZmFjdG9yeSBmb3IgdGhp
cyBidWlsZGVyISIpCisgICAgICAgIAorICAgICAgICBmb3IgYnJkaWN0IGluIGNsZWFuX3NsYXZl
X3JlcXVlc3RzOgorICAgICAgICAgICAgY2xlYW5fc2xhdmVuYW1lID0gYnJkaWN0WydjbGVhbl9z
bGF2ZW5hbWUnXQorICAgICAgICAgICAgbG9nLm1zZygiVHJ5aW5nIHRvIGNsZWFuIHNsYXZlOiAl
cyIgJSBjbGVhbl9zbGF2ZW5hbWUpCisKKyAgICAgICAgICAgICMgYnVpbGQgcmVxdWVzdCBpcyB0
byBjbGVhbiB0aGlzIHBhcnRpY2lsYXIgc2xhdmUKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHRo
YXQgdGhpcyBzbGF2ZWJ1aWxkZXIgaXMgYXZhaWxhYmxlCisgICAgICAgICAgICBzbGF2ZWJ1aWxk
ZXJfdG9fY2xlYW4gPSBOb25lCisKKyAgICAgICAgICAgIGZvciBzbGF2ZWJ1aWxkZXIgaW4gYXZh
aWxhYmxlX3NsYXZlYnVpbGRlcnM6CisgICAgICAgICAgICAgICAgbG9nLm1zZygiQ2hlY2tpbmcg
c2xhdmUgbmFtZWQ6ICVzIiAlIHNsYXZlYnVpbGRlci5zbGF2ZS5zbGF2ZW5hbWUpCisgICAgICAg
ICAgICAgICAgaWYgc2xhdmVidWlsZGVyLnNsYXZlLnNsYXZlbmFtZSA9PSBjbGVhbl9zbGF2ZW5h
bWU6CisgICAgICAgICAgICAgICAgICAgIHNsYXZlYnVpbGRlcl90b19jbGVhbiA9IHNsYXZlYnVp
bGRlcgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3Qgc2xh
dmVidWlsZGVyX3RvX2NsZWFuOgorICAgICAgICAgICAgICAgICMgVGhlIHNsYXZlIHdlIHdhbnQg
dG8gY2xlYW4gaXNuJ3QgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAjIE1h
a2Ugc3VyZSB0aGlzIHJlcXVlc3QgaXNuJ3QgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgCisgICAgICAg
ICAgICAgICAgIyBhdmFpbGFibGUgc2xhdmVidWlsZGVyIHdpdGggdGhlIHJlZ3VsYXIgYnVpbGQg
ZmFjdG9yeSAKKyAgICAgICAgICAgICAgICAjIGJ5IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3Qg
b2YgYnVpbGQgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgdW5jbGFpbWVkX3JlcXVlc3RzLnJl
bW92ZShicmRpY3QpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbG9n
Lm1zZygic2xhdmVidWlsZGVyIHRvIGNsZWFuOiAlcyIgJSBzbGF2ZWJ1aWxkZXJfdG9fY2xlYW4u
c2xhdmUuc2xhdmVuYW1lKQorCisgICAgICAgICAgICAjIHRoaXMgc2xhdmVidWlsZGVyIGlzIGF2
YWlsYWJsZSB0byBjbGVhbiEKKyAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZlcnJl
ZChzZWxmLm1hc3Rlci5kYi5idWlsZHJlcXVlc3RzLmNsYWltQnVpbGRSZXF1ZXN0cyhbYnJkaWN0
WydicmlkJ10sXSkpCisgICAgICAgICAgICB5aWVsZCB3ZmQKKyAgICAgICAgICAgIHdmZC5nZXRS
ZXN1bHQoKQorCisgICAgICAgICAgICAjIF9zdGFydEJ1aWxkRm9yIGV4cGVjdHMgQnVpbGRSZXF1
ZXN0IG9iamVjdHMsIHNvIGNvb2sgc29tZSB1cAorICAgICAgICAgICAgd2ZkID0gZGVmZXIud2Fp
dEZvckRlZmVycmVkKAorICAgICAgICAgICAgICAgICAgICBkZWZlci5nYXRoZXJSZXN1bHRzKFtz
ZWxmLl9icmRpY3RUb0J1aWxkUmVxdWVzdChicmRpY3QpXSkpCisgICAgICAgICAgICB5aWVsZCB3
ZmQKKyAgICAgICAgICAgIGJyZXFzID0gd2ZkLmdldFJlc3VsdCgpCisKKyAgICAgICAgICAgIHdm
ZCA9IGRlZmVyLndhaXRGb3JEZWZlcnJlZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3Rh
cnRCdWlsZEZvcihzbGF2ZWJ1aWxkZXIsIGJyZXFzLCB1c2VfY2xlYW5fZmFjdG9yeT1UcnVlKSkK
KyAgICAgICAgICAgIHlpZWxkIHdmZAorICAgICAgICAgICAgYnVpbGRfc3RhcnRlZCA9IHdmZC5n
ZXRSZXN1bHQoKQorCisgICAgICAgICAgICAjIGZpbmFsbHksIHJlbW92ZSB0aGUgYnVpbGRyZXF1
ZXN0cyBhbmQgc2xhdmVidWlsZGVyIGZyb20gdGhlCisgICAgICAgICAgICAjIHJlc3BlY3RpdmUg
cXVldWVzCisgICAgICAgICAgICBzZWxmLl9icmVha0JyZGljdFJlZmxvb3BzKFticmRpY3RdKQor
ICAgICAgICAgICAgdW5jbGFpbWVkX3JlcXVlc3RzLnJlbW92ZShicmRpY3QpCisgICAgICAgICAg
ICBhdmFpbGFibGVfc2xhdmVidWlsZGVycy5yZW1vdmUoc2xhdmVidWlsZGVyKQorCiAgICAgICAg
IGlmIG5vdCB1bmNsYWltZWRfcmVxdWVzdHM6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZUJpZ1N0
YXR1cygpCiAgICAgICAgICAgICByZXR1cm4KZGlmZiAtYnVyIG9sZF9idWlsZGJvdC9zY2hlZHVs
ZXJzL2Jhc2UucHkgbmV3X2J1aWxkYm90L3NjaGVkdWxlcnMvYmFzZS5weQotLS0gb2xkX2J1aWxk
Ym90L3NjaGVkdWxlcnMvYmFzZS5weQkyMDEyLTAzLTI1IDE3OjA5OjEwLjAwMDAwMDAwMCAtMDcw
MAorKysgbmV3X2J1aWxkYm90L3NjaGVkdWxlcnMvYmFzZS5weQkyMDEyLTA3LTEzIDE2OjA0OjQ3
LjAwMDAwMDAwMCAtMDcwMApAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAKICAgICBAZGVmZXIuZGVmZXJy
ZWRHZW5lcmF0b3IKICAgICBkZWYgYWRkQnVpbGRzZXRGb3JTb3VyY2VTdGFtcChzZWxmLCBzc2lk
PU5vbmUsIHNldGlkPU5vbmUsIHJlYXNvbj0nJywgZXh0ZXJuYWxfaWRzdHJpbmc9Tm9uZSwKLSAg
ICAgICAgICAgIHByb3BlcnRpZXM9Tm9uZSwgYnVpbGRlck5hbWVzPU5vbmUpOgorICAgICAgICAg
ICAgcHJvcGVydGllcz1Ob25lLCBidWlsZGVyTmFtZXM9Tm9uZSwgY2xlYW5TbGF2ZU5hbWU9Tm9u
ZSk6CiAgICAgICAgICIiIgogICAgICAgICBBZGQgYSBidWlsZHNldCBmb3IgdGhlIGdpdmVuLCBh
bHJlYWR5LWV4aXN0aW5nIHNvdXJjZXN0YW1wLgogCkBAIC00OTgsNiArNDk4LDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzdGFtcHNldGlkPXNldGlk
LCByZWFzb249cmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnRpZXM9cHJvcGVydGllc19kaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXJOYW1lcz1idWlsZGVyTmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfaWRzdHJpbmc9ZXh0ZXJuYWxfaWRzdHJp
bmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX2lk
c3RyaW5nPWV4dGVybmFsX2lkc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsZWFuU2xhdmVOYW1lPWNsZWFuU2xhdmVOYW1lKSkKICAgICAgICAgeWllbGQg
d2ZkCiAgICAgICAgIHlpZWxkIHdmZC5nZXRSZXN1bHQoKQpkaWZmIC1idXIgb2xkX2J1aWxkYm90
L3NjaGVkdWxlcnMvZm9yY2VzY2hlZC5weSBuZXdfYnVpbGRib3Qvc2NoZWR1bGVycy9mb3JjZXNj
aGVkLnB5Ci0tLSBvbGRfYnVpbGRib3Qvc2NoZWR1bGVycy9mb3JjZXNjaGVkLnB5CTIwMTItMDMt
MjUgMTc6MDk6MTAuMDAwMDAwMDAwIC0wNzAwCisrKyBuZXdfYnVpbGRib3Qvc2NoZWR1bGVycy9m
b3JjZXNjaGVkLnB5CTIwMTItMDctMTMgMTY6MDQ6NDcuMDAwMDAwMDAwIC0wNzAwCkBAIC0zMDAs
MyArMzAwLDUxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzPXJlYWxfcHJvcGVydGllcykKICAgICAgICAgZC5hZGRDYWxsYmFjayhnb3Rfc2V0aWQpCiAg
ICAgICAgIHJldHVybiBkCisKK2NsYXNzIENsZWFuU2NoZWR1bGVyKGJhc2UuQmFzZVNjaGVkdWxl
cik6CisgICAgCisgICAgY29tcGFyZV9hdHRycyA9ICggJ25hbWUnLCAnYnVpbGRlck5hbWVzJykK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBidWlsZGVyTmFtZXMpOgorCisgICAgICAg
IGJhc2UuQmFzZVNjaGVkdWxlci5fX2luaXRfXyhzZWxmLCBuYW1lPW5hbWUsCisgICAgICAgICAg
ICAgICAgYnVpbGRlck5hbWVzPWJ1aWxkZXJOYW1lcyxwcm9wZXJ0aWVzPXt9KQorCisgICAgZGVm
IHN0YXJ0U2VydmljZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BTZXJ2aWNl
KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2xlYW5XaXRoV2ViUmVxdWVzdChzZWxm
LCBvd25lciwgYnVpbGRlcl9uYW1lLCBzbGF2ZV9uYW1lLCByZXEpOgorICAgICAgICAiIiJDYWxs
ZWQgYnkgdGhlIHdlYiBVSS4KKyAgICAgICAgQXV0aGVudGljYXRpb24gaXMgYWxyZWFkeSBkb25l
LCB0aHVzIG93bmVyIGlzIHBhc3NlZCBhcyBhcmd1bWVudAorICAgICAgICBXZSBjaGVjayB0aGUg
cGFyYW1ldGVycywgYW5kIGxhdW5jaCB0aGUgYnVpbGQsIGlmIGV2ZXJ5dGhpbmcgaXMgY29ycmVj
dAorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJ1aWxkZXJfbmFtZSBpbiBzZWxmLmJ1aWxk
ZXJOYW1lczoKKyAgICAgICAgICAgICMgaW4gdGhlIGNhc2Ugb2YgYnVpbGRBbGwsIHRoaXMgbWV0
aG9kIHdpbGwgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMKKyAgICAgICAgICAgICMgZm9yIGFsbCB0
aGUgYnVpbGRlcnMKKyAgICAgICAgICAgICMgd2UganVzdCBkbyBub3RoaW5nIG9uIGEgYnVpbGRl
ciB0aGF0IGlzIG5vdCBpbiBvdXIgYnVpbGRlck5hbWVzCisgICAgICAgICAgICByZXR1cm4gZGVm
ZXIuc3VjY2VlZChOb25lKQorICAgICAgICBtYXN0ZXIgPSBzZWxmLm1hc3RlcgorICAgICAgICBy
ZWFsX3Byb3BlcnRpZXMgPSBQcm9wZXJ0aWVzKCkKKworICAgICAgICByID0gKCJUaGUgd2ViLXBh
Z2UgJ2NsZWFuJyBidXR0b24gd2FzIHByZXNzZWQgYnkgJyVzJ1xuIgorICAgICAgICAgICAgICUg
b3duZXIpIAorCisgICAgICAgIGQgPSBtYXN0ZXIuZGIuc291cmNlc3RhbXBzZXRzLmFkZFNvdXJj
ZVN0YW1wU2V0KCkKKyAgICAgICAgZGVmIGFkZF9tYXN0ZXJfd2l0aF9zZXRpZChzb3VyY2VzdGFt
cHNldGlkKToKKyAgICAgICAgICAgIG1hc3Rlci5kYi5zb3VyY2VzdGFtcHMuYWRkU291cmNlU3Rh
bXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzdGFtcHNldGlk
ID0gc291cmNlc3RhbXBzZXRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyYW5jaD0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
PScnLCBwcm9qZWN0PScnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk9JycsY2hhbmdlaWRzPVtdKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZXN0YW1w
c2V0aWQKKyAgICAgICAgICAgIAorICAgICAgICBkLmFkZENhbGxiYWNrKGFkZF9tYXN0ZXJfd2l0
aF9zZXRpZCkKKyAgICAgICAgZGVmIGdvdF9zZXRpZChzb3VyY2VzdGFtcHNldGlkKToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLmFkZEJ1aWxkc2V0Rm9yU291cmNlU3RhbXAoYnVpbGRlck5hbWVz
PVtidWlsZGVyX25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
aWQ9c291cmNlc3RhbXBzZXRpZCwgcmVhc29uPXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0aWVzPXJlYWxfcHJvcGVydGllcywgY2xlYW5TbGF2ZU5hbWU9c2xh
dmVfbmFtZSkKKyAgICAgICAgZC5hZGRDYWxsYmFjayhnb3Rfc2V0aWQpCisgICAgICAgIHJldHVy
biBkCmRpZmYgLWJ1ciBvbGRfYnVpbGRib3Qvc3RhdHVzL3dlYi9hdXRoei5weSBuZXdfYnVpbGRi
b3Qvc3RhdHVzL3dlYi9hdXRoei5weQotLS0gb2xkX2J1aWxkYm90L3N0YXR1cy93ZWIvYXV0aHou
cHkJMjAxMi0wMy0yNCAxMzoyMzozMi4wMDAwMDAwMDAgLTA3MDAKKysrIG5ld19idWlsZGJvdC9z
dGF0dXMvd2ViL2F1dGh6LnB5CTIwMTItMDctMTMgMTY6MDQ6NDguMDAwMDAwMDAwIC0wNzAwCkBA
IC0yNSw2ICsyNSw3IEBACiAgICAgIyBJZiB5b3UgYWRkIGEgbmV3IGFjdGlvbiBoZXJlLCBiZSBz
dXJlIHRvIGFsc28gdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uCiAgICAgIyBhdCBkb2NzL2NmZy1z
dGF0dXN0YXJnZXRzLnRleGluZm8KICAgICAgICAgICAgICdncmFjZWZ1bFNodXRkb3duJywKKyAg
ICAgICAgICAgICdjbGVhbkJ1aWxkJywKICAgICAgICAgICAgICdmb3JjZUJ1aWxkJywKICAgICAg
ICAgICAgICdmb3JjZUFsbEJ1aWxkcycsCiAgICAgICAgICAgICAncGluZ0J1aWxkZXInLApkaWZm
IC1idXIgb2xkX2J1aWxkYm90L3N0YXR1cy93ZWIvYnVpbGQucHkgbmV3X2J1aWxkYm90L3N0YXR1
cy93ZWIvYnVpbGQucHkKLS0tIG9sZF9idWlsZGJvdC9zdGF0dXMvd2ViL2J1aWxkLnB5CTIwMTIt
MDMtMjUgMTc6MDk6MTAuMDAwMDAwMDAwIC0wNzAwCisrKyBuZXdfYnVpbGRib3Qvc3RhdHVzL3dl
Yi9idWlsZC5weQkyMDEyLTA3LTEzIDE3OjE3OjQ2LjAwMDAwMDAwMCAtMDcwMApAQCAtOTAsNyAr
OTAsNiBAQAogICAgICAgICAgICAgdXJsID0gcGF0aF90b19idWlsZGVyKHJlcSwgc2VsZi5idWls
ZGVyKSwgbXNnCiAgICAgICAgIHlpZWxkIHVybAogCi0KIGNsYXNzIFN0b3BCdWlsZEFjdGlvblJl
c291cmNlKEFjdGlvblJlc291cmNlKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZF9z
dGF0dXMpOgpkaWZmIC1idXIgb2xkX2J1aWxkYm90L3N0YXR1cy93ZWIvYnVpbGRlci5weSBuZXdf
YnVpbGRib3Qvc3RhdHVzL3dlYi9idWlsZGVyLnB5Ci0tLSBvbGRfYnVpbGRib3Qvc3RhdHVzL3dl
Yi9idWlsZGVyLnB5CTIwMTItMDMtMjUgMTc6MDk6MTAuMDAwMDAwMDAwIC0wNzAwCisrKyBuZXdf
YnVpbGRib3Qvc3RhdHVzL3dlYi9idWlsZGVyLnB5CTIwMTItMDctMTMgMTc6Mjc6NDguMDAwMDAw
MDAwIC0wNzAwCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcGF0aF90b19idWlsZCwgcGF0aF90b19z
bGF2ZSwgcGF0aF90b19idWlsZGVyLCBwYXRoX3RvX2NoYW5nZSwgXAogICAgIHBhdGhfdG9fcm9v
dCwgSUN1cnJlbnRCb3gsIGJ1aWxkX2dldF9jbGFzcywgXAogICAgIG1hcF9icmFuY2hlcywgcGF0
aF90b19hdXRoemZhaWwsIEFjdGlvblJlc291cmNlCi1mcm9tIGJ1aWxkYm90LnNjaGVkdWxlcnMu
Zm9yY2VzY2hlZCBpbXBvcnQgRm9yY2VTY2hlZHVsZXIsIEluaGVyaXRCdWlsZFBhcmFtZXRlcgor
ZnJvbSBidWlsZGJvdC5zY2hlZHVsZXJzLmZvcmNlc2NoZWQgaW1wb3J0IEZvcmNlU2NoZWR1bGVy
LCBDbGVhblNjaGVkdWxlciwgSW5oZXJpdEJ1aWxkUGFyYW1ldGVyCiBmcm9tIGJ1aWxkYm90LnN0
YXR1cy53ZWIuYnVpbGQgaW1wb3J0IEJ1aWxkc1Jlc291cmNlLCBTdGF0dXNSZXNvdXJjZUJ1aWxk
CiBmcm9tIGJ1aWxkYm90IGltcG9ydCB1dGlsCiAKQEAgLTE2MSw3ICsxNjEsNTEgQEAKICAgICAg
ICAgIyBzZW5kIHRoZSB1c2VyIGJhY2sgdG8gdGhlIGJ1aWxkZXIgcGFnZQogICAgICAgICB5aWVs
ZCBwYXRoX3RvX2J1aWxkZXIocmVxLCBzZWxmLmJ1aWxkZXJfc3RhdHVzKSwgbXNnCiAKK2NsYXNz
IENsZWFuQnVpbGRBY3Rpb25SZXNvdXJjZShBY3Rpb25SZXNvdXJjZSk6CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnVpbGRlcl9zdGF0dXMpOgorICAgICAgICBzZWxmLmJ1aWxkZXJfc3RhdHVz
ID0gYnVpbGRlcl9zdGF0dXMKKyAgICAgICAgc2VsZi5hY3Rpb24gPSAiY2xlYW5CdWlsZCIKKwor
ICAgIEBkZWZlci5kZWZlcnJlZEdlbmVyYXRvcgorICAgIGRlZiBwZXJmb3JtQWN0aW9uKHNlbGYs
IHJlcSk6CisgICAgICAgICMgY2hlY2sgaWYgdGhpcyBpcyBhbGxvd2VkCisgICAgICAgIGQgPSBz
ZWxmLmdldEF1dGh6KHJlcSkuYWN0aW9uQWxsb3dlZChzZWxmLmFjdGlvbiwgcmVxLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyX3N0YXR1
cykKKyAgICAgICAgd2ZkID0gZGVmZXIud2FpdEZvckRlZmVycmVkKGQpCisgICAgICAgIHlpZWxk
IHdmZAorICAgICAgICByZXMgPSB3ZmQuZ2V0UmVzdWx0KCkKKyAgICAgICAgaWYgbm90IHJlczoK
KyAgICAgICAgICAgIGxvZy5tc2coIi4uYnV0IG5vdCBhdXRob3JpemVkIikKKyAgICAgICAgICAg
IHlpZWxkIHBhdGhfdG9fYXV0aHpmYWlsKHJlcSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIG1hc3RlciA9IHNlbGYuZ2V0QnVpbGRtYXN0ZXIocmVxKQorICAgICAgICBvd25lciA9IHNl
bGYuZ2V0QXV0aHoocmVxKS5nZXRVc2VybmFtZUZ1bGwocmVxKQorICAgICAgICBzY2hlZHVsZXJu
YW1lID0gcmVxLmFyZ3MuZ2V0KCJjbGVhbnNjaGVkdWxlciIsIFsiPHVua25vd24+Il0pWzBdCisg
ICAgICAgIGlmIHNjaGVkdWxlcm5hbWUgPT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICB5aWVs
ZCBwYXRoX3RvX2J1aWxkZXIocmVxLCBzZWxmLmJ1aWxkZXJfc3RhdHVzKSwgImNsZWFuc2NoZWR1
bGVyIGFyZyBub3QgZm91bmQiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2xhdmVuYW1l
ID0gcmVxLmFyZ3MuZ2V0KCJzbGF2ZW5hbWUiLCBbIjx1bmtub3duPiJdKVswXQorICAgICAgICBp
ZiBzbGF2ZW5hbWUgPT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICB5aWVsZCBwYXRoX3RvX2J1
aWxkZXIocmVxLCBzZWxmLmJ1aWxkZXJfc3RhdHVzKSwgInNsYXZlbmFtZSBhcmcgbm90IGZvdW5k
IgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBzY2ggaW4gbWFzdGVyLmFsbFNjaGVk
dWxlcnMoKToKKyAgICAgICAgICAgIGlmIHNjaGVkdWxlcm5hbWUgPT0gc2NoLm5hbWU6CisgICAg
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkID0gc2NoLmNsZWFuV2l0aFdl
YlJlcXVlc3Qob3duZXIsIHNlbGYuYnVpbGRlcl9zdGF0dXMuZ2V0TmFtZSgpLCBzbGF2ZW5hbWUs
IHJlcSkKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIiIKKyAgICAgICAgICAgICAgICBleGNl
cHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBodG1sLmVzY2FwZShl
Lm1lc3NhZ2UuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpKQorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZlcnJlZChkKQorICAgICAgICB5aWVsZCB3
ZmQKKyAgICAgICAgcmVzID0gd2ZkLmdldFJlc3VsdCgpCisgICAgICAgICMgc2VuZCB0aGUgdXNl
ciBiYWNrIHRvIHRoZSBidWlsZGVyIHBhZ2UKKyAgICAgICAgeWllbGQgcGF0aF90b19idWlsZGVy
KHJlcSwgc2VsZi5idWlsZGVyX3N0YXR1cyksIG1zZworCiBkZWYgYnVpbGRGb3JjZUNvbnRleHQo
Y3h0LCByZXEsIG1hc3RlciwgYnVpbGRlcm5hbWU9Tm9uZSk6CisgICAgY3h0WydjbGVhbl9zY2hl
ZHVsZXInXSA9IE5vbmUKICAgICBmb3JjZV9zY2hlZHVsZXJzID0ge30KICAgICBkZWZhdWx0X3By
b3BzID0ge30KICAgICBmb3Igc2NoIGluIG1hc3Rlci5hbGxTY2hlZHVsZXJzKCk6CkBAIC0xODQs
NiArMjI4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShkZWZhdWx0KT09dW5pY29k
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBodG1sLmVzY2FwZShkZWZhdWx0
LmVuY29kZSgnYXNjaWknLCdpZ25vcmUnKSkKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9w
cm9wc1twbmFtZV0gPSBkZWZhdWx0CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzY2gsIENsZWFu
U2NoZWR1bGVyKSBhbmQgKGJ1aWxkZXJuYW1lIGluIHNjaC5idWlsZGVyTmFtZXMpOgorICAgICAg
ICAgICAgY3h0WydjbGVhbl9zY2hlZHVsZXInXSA9IHNjaAorCiAgICAgY3h0Wydmb3JjZV9zY2hl
ZHVsZXJzJ10gPSBmb3JjZV9zY2hlZHVsZXJzCiAgICAgY3h0WydkZWZhdWx0X3Byb3BzJ10gPSBk
ZWZhdWx0X3Byb3BzCiAKQEAgLTMxOCw2ICszNjUsOCBAQAogICAgICAgICAgICAgcmV0dXJuIFN0
b3BDaGFuZ2VSZXNvdXJjZShzZWxmLmJ1aWxkZXJfc3RhdHVzKQogICAgICAgICBpZiBwYXRoID09
ICJidWlsZHMiOgogICAgICAgICAgICAgcmV0dXJuIEJ1aWxkc1Jlc291cmNlKHNlbGYuYnVpbGRl
cl9zdGF0dXMpCisgICAgICAgIGlmIHBhdGggPT0gImNsZWFuIjoKKyAgICAgICAgICAgIHJldHVy
biBDbGVhbkJ1aWxkQWN0aW9uUmVzb3VyY2Uoc2VsZi5idWlsZGVyX3N0YXR1cykKIAogICAgICAg
ICByZXR1cm4gSHRtbFJlc291cmNlLmdldENoaWxkKHNlbGYsIHBhdGgsIHJlcSkKIApkaWZmIC1i
dXIgb2xkX2J1aWxkYm90L3N0YXR1cy93ZWIvdGVtcGxhdGVzL2J1aWxkZXIuaHRtbCBuZXdfYnVp
bGRib3Qvc3RhdHVzL3dlYi90ZW1wbGF0ZXMvYnVpbGRlci5odG1sCi0tLSBvbGRfYnVpbGRib3Qv
c3RhdHVzL3dlYi90ZW1wbGF0ZXMvYnVpbGRlci5odG1sCTIwMTItMDMtMjQgMTM6MjM6MzIuMDAw
MDAwMDAwIC0wNzAwCisrKyBuZXdfYnVpbGRib3Qvc3RhdHVzL3dlYi90ZW1wbGF0ZXMvYnVpbGRl
ci5odG1sCTIwMTItMDctMTMgMTY6MDQ6NDguMDAwMDAwMDAwIC0wNzAwCkBAIC04OCw2ICs4OCw5
IEBACiAgIHslIGlmIHMuY29ubmVjdGVkICV9CiAgICAgPHRkIGNsYXNzPSJpZGxlIj5jb25uZWN0
ZWQ8L3RkPgogICAgIDx0ZD57eyBzLmFkbWlufGVtYWlsIGlmIHMuYWRtaW4gZWxzZSAiIn19PC90
ZD4KKyAgICB7JSBpZiBhdXRoei5hZHZlcnRpc2VBY3Rpb24oJ2NsZWFuQnVpbGQnLCByZXF1ZXN0
KSBhbmQgY2xlYW5fc2NoZWR1bGVyICV9CisgICAgICA8dGQ+e3sgZm9ybXMuY2xlYW5fYnVpbGQo
YnVpbGRlcl91cmwrIi9jbGVhbiIsIGNsZWFuX3NjaGVkdWxlciwgcykgfX08L3RkPgorICAgIHsl
IGVuZGlmICV9CiAgIHslIGVsc2UgJX0KICAgICA8dGQgY2xhc3M9Im9mZmxpbmUiPm9mZmxpbmU8
L3RkPiAKICAgICA8dGQvPgpkaWZmIC1idXIgb2xkX2J1aWxkYm90L3N0YXR1cy93ZWIvdGVtcGxh
dGVzL2Zvcm1zLmh0bWwgbmV3X2J1aWxkYm90L3N0YXR1cy93ZWIvdGVtcGxhdGVzL2Zvcm1zLmh0
bWwKLS0tIG9sZF9idWlsZGJvdC9zdGF0dXMvd2ViL3RlbXBsYXRlcy9mb3Jtcy5odG1sCTIwMTIt
MDMtMjUgMTE6MDg6MTguMDAwMDAwMDAwIC0wNzAwCisrKyBuZXdfYnVpbGRib3Qvc3RhdHVzL3dl
Yi90ZW1wbGF0ZXMvZm9ybXMuaHRtbAkyMDEyLTA3LTEzIDE2OjA0OjQ4LjAwMDAwMDAwMCAtMDcw
MApAQCAtMTU1LDYgKzE1NSwxNCBAQAogCiB7JSBlbmRtYWNybyAlfQogCit7JSBtYWNybyBjbGVh
bl9idWlsZChjbGVhbl91cmwsIHNjaCwgc2xhdmUpICV9CisgIDxmb3JtIG1ldGhvZD0icG9zdCIg
bmFtZT0iY2xlYW5fYnVpbGQiIGFjdGlvbj0ie3sgY2xlYW5fdXJsIH19IiBjbGFzcz0iY29tbWFu
ZCBjbGVhbmJ1aWxkIj4KKyAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdjbGVhbnNjaGVk
dWxlcicgdmFsdWU9J3t7c2NoLm5hbWV9fScgLz4KKyAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBu
YW1lPSdzbGF2ZW5hbWUnIHZhbHVlPSd7e3NsYXZlLm5hbWV9fScgLz4KKyAgICA8aW5wdXQgdHlw
ZT0ic3VibWl0IiB2YWx1ZT0iQ2xlYW4gQnVpbGQiIC8+CisgIDwvZm9ybT4KK3slIGVuZG1hY3Jv
ICV9CisKIHslIG1hY3JvIGdyYWNlZnVsX3NodXRkb3duKHNodXRkb3duX3VybCwgYXV0aHopICV9
CiAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSJ7eyBzaHV0ZG93bl91cmwgfX0iIGNsYXNz
PSdjb21tYW5kIGdyYWNlZnVsX3NodXRkb3duJz4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>152643</attachid>
            <date>2012-07-16 16:53:34 -0700</date>
            <delta_ts>2012-07-19 12:30:33 -0700</delta_ts>
            <desc>DB migration script</desc>
            <filename>022_add_buildrequests_clean_slavename_column.py</filename>
            <type>text/x-python-script</type>
            <size>1023</size>
            <attacher name="Josh Hawn">jhawn</attacher>
            
              <data encoding="base64">IyBUaGlzIGZpbGUgaXMgcGFydCBvZiBCdWlsZGJvdC4gIEJ1aWxkYm90IGlzIGZyZWUgc29mdHdh
cmU6IHlvdSBjYW4KIyByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwojIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KIwojIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQojIGRldGFpbHMu
CiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCiMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCiMgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KIwojIENvcHlyaWdodCBC
dWlsZGJvdCBUZWFtIE1lbWJlcnMKCmltcG9ydCBzcWxhbGNoZW15IGFzIHNhCgpkZWYgdXBncmFk
ZShtaWdyYXRlX2VuZ2luZSk6CgogICAgbWV0YWRhdGEgPSBzYS5NZXRhRGF0YSgpCiAgICBtZXRh
ZGF0YS5iaW5kID0gbWlncmF0ZV9lbmdpbmUKCiAgICBidWlsZHJlcXVlc3RzX3RhYmxlID0gc2Eu
VGFibGUoJ2J1aWxkcmVxdWVzdHMnLCBtZXRhZGF0YSwgYXV0b2xvYWQ9VHJ1ZSkKCiAgICBjbGVh
bl9zbGF2ZW5hbWUgPSBzYS5Db2x1bW4oJ2NsZWFuX3NsYXZlbmFtZScsIHNhLlN0cmluZygyNTYp
KQogICAgY2xlYW5fc2xhdmVuYW1lLmNyZWF0ZShidWlsZHJlcXVlc3RzX3RhYmxlKQogICAg
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>153320</attachid>
            <date>2012-07-19 12:30:33 -0700</date>
            <delta_ts>2012-07-19 12:30:33 -0700</delta_ts>
            <desc>Changes to Buildbot (Take 2) </desc>
            <filename>buildbot-2.diff</filename>
            <type>application/octet-stream</type>
            <size>5674</size>
            <attacher name="Josh Hawn">jhawn</attacher>
            
              <data encoding="base64">ZGlmZiAtcnUgb2xkX2J1aWxkYm90L2NvbmZpZy5weSBuZXdfYnVpbGRib3QvY29uZmlnLnB5Ci0t
LSBvbGRfYnVpbGRib3QvY29uZmlnLnB5CTIwMTItMDMtMjUgMTc6MDk6MTAuMDAwMDAwMDAwIC0w
NzAwCisrKyBuZXdfYnVpbGRib3QvY29uZmlnLnB5CTIwMTItMDctMTggMTU6NTc6NTkuMDAwMDAw
MDAwIC0wNzAwCkBAIC01OTYsNyArNTk2LDcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZT1Ob25lLCBzbGF2ZW5hbWU9Tm9uZSwgc2xhdmVuYW1lcz1Ob25lLAogICAgICAgICAgICAgYnVp
bGRkaXI9Tm9uZSwgc2xhdmVidWlsZGRpcj1Ob25lLCBmYWN0b3J5PU5vbmUsIGNhdGVnb3J5PU5v
bmUsCiAgICAgICAgICAgICBuZXh0U2xhdmU9Tm9uZSwgbmV4dEJ1aWxkPU5vbmUsIGxvY2tzPU5v
bmUsIGVudj1Ob25lLAotICAgICAgICAgICAgcHJvcGVydGllcz1Ob25lLCBtZXJnZVJlcXVlc3Rz
PU5vbmUpOgorICAgICAgICAgICAgcHJvcGVydGllcz1Ob25lLCBtZXJnZVJlcXVlc3RzPU5vbmUs
IGNob29zZVNsYXZlQW5kTWVyZ2VCdWlsZFJlcXVlc3RzPU5vbmUpOgogCiAgICAgICAgIGVycm9y
cyA9IENvbmZpZ0Vycm9ycyhbXSkKIApAQCAtNjY2LDYgKzY2NiwxMCBAQAogICAgICAgICBzZWxm
LnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIG9yIHt9CiAgICAgICAgIHNlbGYubWVyZ2VSZXF1ZXN0
cyA9IG1lcmdlUmVxdWVzdHMKIAorICAgICAgICBzZWxmLmNob29zZVNsYXZlQW5kTWVyZ2VCdWls
ZFJlcXVlc3RzID0gY2hvb3NlU2xhdmVBbmRNZXJnZUJ1aWxkUmVxdWVzdHMKKyAgICAgICAgaWYg
Y2hvb3NlU2xhdmVBbmRNZXJnZUJ1aWxkUmVxdWVzdHMgYW5kIG5vdCBjYWxsYWJsZShjaG9vc2VT
bGF2ZUFuZE1lcmdlQnVpbGRSZXF1ZXN0cyk6CisgICAgICAgICAgICBlcnJvcnMuYWRkRXJyb3Io
J2Nob29zZVNsYXZlQW5kTWVyZ2VCdWlsZFJlcXVlc3RzIG11c3QgYmUgYSBjYWxsYWJsZScpCisK
ICAgICAgICAgaWYgZXJyb3JzOgogICAgICAgICAgICAgcmFpc2UgZXJyb3JzCiAKZGlmZiAtcnUg
b2xkX2J1aWxkYm90L3Byb2Nlc3MvYnVpbGRlci5weSBuZXdfYnVpbGRib3QvcHJvY2Vzcy9idWls
ZGVyLnB5Ci0tLSBvbGRfYnVpbGRib3QvcHJvY2Vzcy9idWlsZGVyLnB5CTIwMTItMDMtMjUgMTc6
MDk6MTAuMDAwMDAwMDAwIC0wNzAwCisrKyBuZXdfYnVpbGRib3QvcHJvY2Vzcy9idWlsZGVyLnB5
CTIwMTItMDctMTkgMTA6NDg6NDAuMDAwMDAwMDAwIC0wNzAwCkBAIC00OTcsNDEgKzQ5Nyw3NiBA
QAogCiAgICAgICAgICMgbWF0Y2ggdGhlbSB1cCB1bnRpbCB3ZSdyZSBvdXQgb2Ygb3B0aW9ucwog
ICAgICAgICB3aGlsZSBhdmFpbGFibGVfc2xhdmVidWlsZGVycyBhbmQgdW5jbGFpbWVkX3JlcXVl
c3RzOgotICAgICAgICAgICAgIyBmaXJzdCwgY2hvb3NlIGEgc2xhdmUgKHVzaW5nIG5leHRTbGF2
ZSkKLSAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZlcnJlZCgKLSAgICAgICAgICAg
ICAgICBzZWxmLl9jaG9vc2VTbGF2ZShhdmFpbGFibGVfc2xhdmVidWlsZGVycykpCi0gICAgICAg
ICAgICB5aWVsZCB3ZmQKLSAgICAgICAgICAgIHNsYXZlYnVpbGRlciA9IHdmZC5nZXRSZXN1bHQo
KQogCi0gICAgICAgICAgICBpZiBub3Qgc2xhdmVidWlsZGVyOgotICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICBzbGF2ZWJ1aWxkZXIgPSBOb25lCisgICAgICAgICAgICBicmRpY3Rz
ID0gTm9uZQogCi0gICAgICAgICAgICBpZiBzbGF2ZWJ1aWxkZXIgbm90IGluIGF2YWlsYWJsZV9z
bGF2ZWJ1aWxkZXJzOgotICAgICAgICAgICAgICAgIGxvZy5tc2coKCJuZXh0U2xhdmUgY2hvc2Ug
YSBub25leGlzdGVudCBzbGF2ZSBmb3IgYnVpbGRlciAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIiclcyc7IGNhbm5vdCBzdGFydCBidWlsZCIpICUgc2VsZi5uYW1lKQotICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5jaG9vc2VTbGF2ZUFuZE1lcmdl
QnVpbGRSZXF1ZXN0czoKIAotICAgICAgICAgICAgIyB0aGVuIGNob29zZSBhIHJlcXVlc3QgKHVz
aW5nIG5leHRCdWlsZCkKLSAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZlcnJlZCgK
LSAgICAgICAgICAgICAgICBzZWxmLl9jaG9vc2VCdWlsZCh1bmNsYWltZWRfcmVxdWVzdHMpKQot
ICAgICAgICAgICAgeWllbGQgd2ZkCi0gICAgICAgICAgICBicmRpY3QgPSB3ZmQuZ2V0UmVzdWx0
KCkKKyAgICAgICAgICAgICAgICAjIHdlJ2xsIG5lZWQgQnVpbGRSZXF1ZXN0IG9iamVjdHMsIHNv
IGdldCB0aG9zZSBmaXJzdAorICAgICAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZl
cnJlZCgKKyAgICAgICAgICAgICAgICAgICAgZGVmZXIuZ2F0aGVyUmVzdWx0cygKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsgc2VsZi5fYnJkaWN0VG9CdWlsZFJlcXVlc3QoYnJkaWN0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgYnJkaWN0IGluIHVuY2xhaW1lZF9yZXF1ZXN0cyBd
KSkKKyAgICAgICAgICAgICAgICB5aWVsZCB3ZmQKKyAgICAgICAgICAgICAgICB1bmNsYWltZWRf
cmVxdWVzdF9vYmplY3RzID0gd2ZkLmdldFJlc3VsdCgpCiAKLSAgICAgICAgICAgIGlmIG5vdCBi
cmRpY3Q6Ci0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzbGF2ZWJ1aWxk
ZXIsIGJyZXFzID0gc2VsZi5jb25maWcuY2hvb3NlU2xhdmVBbmRNZXJnZUJ1aWxkUmVxdWVzdHMo
YXZhaWxhYmxlX3NsYXZlYnVpbGRlcnMsIHVuY2xhaW1lZF9yZXF1ZXN0X29iamVjdHMpCiAKLSAg
ICAgICAgICAgIGlmIGJyZGljdCBub3QgaW4gdW5jbGFpbWVkX3JlcXVlc3RzOgotICAgICAgICAg
ICAgICAgIGxvZy5tc2coKCJuZXh0QnVpbGQgY2hvc2UgYSBub25leGlzdGVudCByZXF1ZXN0IGZv
ciBidWlsZGVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJzsgY2Fubm90IHN0YXJ0
IGJ1aWxkIikgJSBzZWxmLm5hbWUpCi0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg
ICAgICBpZiBub3Qgc2xhdmVidWlsZGVyOgorICAgICAgICAgICAgICAgICAgICBicmVhawogCi0g
ICAgICAgICAgICAjIG1lcmdlIHRoZSBjaG9zZW4gcmVxdWVzdCB3aXRoIGFueSBjb21wYXRpYmxl
IHJlcXVlc3RzIGluIHRoZQotICAgICAgICAgICAgIyBxdWV1ZQotICAgICAgICAgICAgd2ZkID0g
ZGVmZXIud2FpdEZvckRlZmVycmVkKAotICAgICAgICAgICAgICAgIHNlbGYuX21lcmdlUmVxdWVz
dHMoYnJkaWN0LCB1bmNsYWltZWRfcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXJnZVJlcXVlc3RzX2ZuKSkKLSAgICAgICAgICAgIHlpZWxkIHdmZAotICAg
ICAgICAgICAgYnJkaWN0cyA9IHdmZC5nZXRSZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIHNs
YXZlYnVpbGRlciBub3QgaW4gYXZhaWxhYmxlX3NsYXZlYnVpbGRlcnM6CisgICAgICAgICAgICAg
ICAgICAgIGxvZy5tc2coKCJjaG9vc2VTbGF2ZUFuZE1lcmdlQnVpbGRSZXF1ZXN0cyBjaG9zZSBh
IG5vbmV4aXN0ZW50IHNsYXZlIGZvciBidWlsZGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiclcyc7IGNhbm5vdCBzdGFydCBidWlsZCIpICUgc2VsZi5uYW1lKQorICAgICAgICAg
ICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgaWYgbm90IGJyZXFzOgorICAgICAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgYnJkaWN0cyA9IFsgYnIuYnJk
aWN0IGZvciBiciBpbiBicmVxcyBdCisgICAgICAgICAgICAgICAgZm9yIGJyZGljdCBpbiBicmRp
Y3RzOgorICAgICAgICAgICAgICAgICAgICBpZiBicmRpY3Qgbm90IGluIHVuY2xhaW1lZF9yZXF1
ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5tc2coKCJjaG9vc2VTbGF2ZUFuZE1l
cmdlQnVpbGRSZXF1ZXN0cyBjaG9zZSBhIG5vbmV4aXN0ZW50IHJlcXVlc3QgZm9yIGJ1aWxkZXIg
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcyc7IGNhbm5vdCBzdGFydCBi
dWlsZCIpICUgc2VsZi5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGZpcnN0LCBjaG9vc2UgYSBzbGF2ZSAo
dXNpbmcgbmV4dFNsYXZlKQorICAgICAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZl
cnJlZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hvb3NlU2xhdmUoYXZhaWxhYmxlX3Ns
YXZlYnVpbGRlcnMpKQorICAgICAgICAgICAgICAgIHlpZWxkIHdmZAorICAgICAgICAgICAgICAg
IHNsYXZlYnVpbGRlciA9IHdmZC5nZXRSZXN1bHQoKQorCisgICAgICAgICAgICAgICAgaWYgbm90
IHNsYXZlYnVpbGRlcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAg
ICAgIGlmIHNsYXZlYnVpbGRlciBub3QgaW4gYXZhaWxhYmxlX3NsYXZlYnVpbGRlcnM6CisgICAg
ICAgICAgICAgICAgICAgIGxvZy5tc2coKCJuZXh0U2xhdmUgY2hvc2UgYSBub25leGlzdGVudCBz
bGF2ZSBmb3IgYnVpbGRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnOyBj
YW5ub3Qgc3RhcnQgYnVpbGQiKSAlIHNlbGYubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKworICAgICAgICAgICAgICAgICMgdGhlbiBjaG9vc2UgYSByZXF1ZXN0ICh1c2luZyBuZXh0
QnVpbGQpCisgICAgICAgICAgICAgICAgd2ZkID0gZGVmZXIud2FpdEZvckRlZmVycmVkKAorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9jaG9vc2VCdWlsZCh1bmNsYWltZWRfcmVxdWVzdHMpKQor
ICAgICAgICAgICAgICAgIHlpZWxkIHdmZAorICAgICAgICAgICAgICAgIGJyZGljdCA9IHdmZC5n
ZXRSZXN1bHQoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGJyZGljdDoKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGJyZGljdCBub3QgaW4gdW5jbGFp
bWVkX3JlcXVlc3RzOgorICAgICAgICAgICAgICAgICAgICBsb2cubXNnKCgibmV4dEJ1aWxkIGNo
b3NlIGEgbm9uZXhpc3RlbnQgcmVxdWVzdCBmb3IgYnVpbGRlciAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICInJXMnOyBjYW5ub3Qgc3RhcnQgYnVpbGQiKSAlIHNlbGYubmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgbWVyZ2UgdGhlIGNo
b3NlbiByZXF1ZXN0IHdpdGggYW55IGNvbXBhdGlibGUgcmVxdWVzdHMgaW4gdGhlCisgICAgICAg
ICAgICAgICAgIyBxdWV1ZQorICAgICAgICAgICAgICAgIHdmZCA9IGRlZmVyLndhaXRGb3JEZWZl
cnJlZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWVyZ2VSZXF1ZXN0cyhicmRpY3QsIHVu
Y2xhaW1lZF9yZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZVJlcXVlc3RzX2ZuKSkKKyAgICAgICAgICAgICAgICB5aWVsZCB3ZmQKKyAgICAgICAg
ICAgICAgICBicmRpY3RzID0gd2ZkLmdldFJlc3VsdCgpCiAKICAgICAgICAgICAgICMgdHJ5IHRv
IGNsYWltIHRoZSBidWlsZCByZXF1ZXN0cwogICAgICAgICAgICAgYnJpZHMgPSBbIGJyZGljdFsn
YnJpZCddIGZvciBicmRpY3QgaW4gYnJkaWN0cyBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>