diff --git a/cfg/cfg.d/z_reports.pl b/cfg/cfg.d/z_reports.pl
index a421af4..a36485b 100644
--- a/cfg/cfg.d/z_reports.pl
+++ b/cfg/cfg.d/z_reports.pl
@@ -74,6 +74,9 @@
datestamp
)];
+#set order of export plugins
+$c->{eprint_report}->{export_plugins} = [ qw( Export::Report::CSV Export::Report::HTML Export::Report::JSON )];
+
#set config for default user report
$c->{datasets}->{user}->{search}->{user_report} = $c->{search}->{user}; #use the default user search form
@@ -91,13 +94,11 @@
dept
org
address
- counter
usertype
email
)],
};
-
$c->{user_report}->{exportfield_defaults} = [ qw(
name
username
@@ -105,13 +106,13 @@
dept
org
address
- counter
usertype
email
)];
+#set order of export plugins
+$c->{user_report}->{export_plugins} = [ qw( Export::Report::CSV Export::Report::HTML Export::Report::JSON )];
push @{$c->{user_roles}->{admin}}, qw{
+report
};
-
diff --git a/lib/lang/en/phrases/reports.xml b/lib/lang/en/phrases/reports.xml
index 2a9380d..2abf9e5 100644
--- a/lib/lang/en/phrases/reports.xml
+++ b/lib/lang/en/phrases/reports.xml
@@ -15,6 +15,10 @@
No Grouping
+Select/Deselect All
+
+
+
Example
Articles
diff --git a/lib/plugins/EPrints/Plugin/Export/Grid2.pm b/lib/plugins/EPrints/Plugin/Export/Grid2.pm
index a4ef808..d3cb84e 100644
--- a/lib/plugins/EPrints/Plugin/Export/Grid2.pm
+++ b/lib/plugins/EPrints/Plugin/Export/Grid2.pm
@@ -198,7 +198,7 @@ sub dataobj_to_rows
{
if( scalar @{$sub_dataobj_values} > 0 )
{
- $_rows = $self->value_to_rows($field, $sub_dataobj_values);
+ $_rows = $self->value_to_rows($field, $sub_dataobj_values, $dataobj);
}
else #there's no results, but we still need to add an empty cell to the spreadsheet
{
@@ -224,7 +224,7 @@ sub dataobj_to_rows
{
$value = $field->get_value( $dataobj );
}
- $_rows = $self->value_to_rows($field, $value);
+ $_rows = $self->value_to_rows($field, $value, $dataobj);
}
}
@@ -262,14 +262,14 @@ sub dataobj_to_rows
sub value_to_rows
{
- my ($self, $field, $value) = @_;
+ my ($self, $field, $value, $dataobj) = @_;
my @rows;
if (ref($value) eq "ARRAY")
{
$value = [$field->empty_value] if !@$value;
- @rows = map { $self->value_to_rows($field, $_)->[0] } @$value;
+ @rows = map { $self->value_to_rows($field, $_, $dataobj)->[0] } @$value;
}
elsif ($field->isa("EPrints::MetaField::Multipart"))
{
@@ -296,6 +296,21 @@ sub value_to_rows
}
push @rows, \@sub_values;
}
+ elsif( $field->isa("EPrints::MetaField::Subject"))
+ {
+ if( $value ne "" )
+ {
+ push @rows, [$field->render_single_value( $field->repository, $value )];
+ }
+ else
+ {
+ push @rows, [$value];
+ }
+ }
+ elsif( !$field->isa("EPrints::MetaField::Subobject") && $field->is_virtual )
+ {
+ push @rows, [$dataobj->render_value( $field->name )];
+ }
else
{
push @rows, [$value];
diff --git a/lib/plugins/EPrints/Plugin/Export/Report/JSON.pm b/lib/plugins/EPrints/Plugin/Export/Report/JSON.pm
index f516332..198ff5a 100644
--- a/lib/plugins/EPrints/Plugin/Export/Report/JSON.pm
+++ b/lib/plugins/EPrints/Plugin/Export/Report/JSON.pm
@@ -181,7 +181,8 @@ sub _epdata_to_json
next if !$field->get_property( "export_as_xml" );
next if defined $field->{sub_name};
my $value = $field->get_value( $epdata );
- if( exists $repo->config( $self->{report}->{export_conf}, "custom_export" )->{$field->get_name} )
+ if( defined $repo->config( $self->{report}->{export_conf}, "custom_export" ) &&
+ exists $repo->config( $self->{report}->{export_conf}, "custom_export" )->{$field->get_name} )
{
$value = $repo->config( $self->{report}->{export_conf}, "custom_export" )->{$field->get_name}->( $epdata, $self->{report} );
}
diff --git a/lib/plugins/EPrints/Plugin/Screen/Report.pm b/lib/plugins/EPrints/Plugin/Screen/Report.pm
index 434c060..ce6ae05 100644
--- a/lib/plugins/EPrints/Plugin/Screen/Report.pm
+++ b/lib/plugins/EPrints/Plugin/Screen/Report.pm
@@ -14,7 +14,7 @@ sub new
my $self = $class->SUPER::new(%params);
- push @{$self->{actions}}, qw( export search );
+ push @{$self->{actions}}, qw( export search newsearch update );
$self->{sconf} = "report";
@@ -133,6 +133,34 @@ sub _create_search
}
}
+sub allow_newsearch { return 1; }
+
+sub allow_update { return 1; }
+
+sub action_newsearch
+{
+ my( $self ) = @_;
+
+ my $session = $self->{session};
+
+ #$self->{processor}->{report} = $session->param( 'report' );
+ #$self->{processor}->{screenid} = $self->{processor}->{report};
+ #$self->{processor}->{action} = "newsearch";
+ #$self->_create_search;
+}
+
+sub action_update
+{
+ my( $self ) = @_;
+
+ my $session = $self->{session};
+
+ #$self->{processor}->{report} = $session->param( 'report' );
+ #$self->{processor}->{screenid} = $self->{processor}->{report};
+ #$self->{processor}->{action} = "newsearch";
+ #$self->_create_search;
+}
+
sub action_search
{
my( $self ) = @_;
@@ -216,9 +244,18 @@ sub properties_from
my @exportfields;
if( defined $repo->config( $self->{export_conf}, "exportfields" ) )
{
- foreach my $fieldnames ( values %{$repo->config( $self->{export_conf}, "exportfields" )} )
+ my @keys;
+ if( defined $repo->config( $self->{export_conf}, "exportfield_order" ) )
+ {
+ @keys = @{$repo->config( $self->{export_conf}, "exportfield_order" )};
+ }
+ else
+ {
+ @keys = keys %{$repo->config( $self->{export_conf}, "exportfields" )};
+ }
+ foreach my $key ( @keys )
{
- foreach my $fieldname ( @{$fieldnames} )
+ foreach my $fieldname ( @{$repo->config( $self->{export_conf}, "exportfields" )->{$key}} )
{
push @exportfields, $fieldname if defined $self->repository->param( $fieldname );
}
@@ -534,6 +571,8 @@ sub render_splash_page
my $custom = $repo->make_element( "div", id=>"custom_report" );
my $form = $repo->render_form( "get" );
+ $form->appendChild( $self->render_controls( 1 ) );
+
#add each report to the select component and generate search form if required
my $report_select = $repo->make_element( "select", name=>"report", id=>"select_report" );
my %search_forms;
@@ -549,11 +588,19 @@ sub render_splash_page
#add to select component
my $id = $report_plugin->{report};
my $option = $repo->make_element( "option", value => $report_plugin->get_subtype, form => $formid );
- $option->appendChild( $report_plugin->render_title );
+
+ #set default option for select component if required (i.e. we have come from a refine search or new search link)
+ my $refine_sconf = $self->{session}->param( "sconf" );
+ if( ( $self->{processor}->{action} eq "update" || $self->{processor}->{action} eq "newsearch" ) && defined $refine_sconf && $refine_sconf eq $formid )
+ {
+ $option->setAttribute( selected => "selected" );
+ }
+
+ #set option text and add to select
+ $option->appendChild( $report_plugin->render_title );
$report_select->appendChild( $option );
- #create search form
-
+ #create search form
#get report dataset and appropriate search config
my $report_ds = $repo->dataset( $report_plugin->{searchdatasetid} );
my $sconf = $report_ds->search_config( $report_plugin->{sconf} ) ;
@@ -578,7 +625,7 @@ sub render_splash_page
$searchexp->from_form;
#generate the form
- my $frag = $self->render_search_fields( $searchexp );
+ my $frag = $self->render_search_fields( $searchexp, $formid );
$search_forms{$formid} = $frag unless exists $search_forms{$formid};
}
}
@@ -610,7 +657,13 @@ sub render_splash_page
push @panels, $preset;
push @panels, $custom;
- return $repo->xhtml->tabs(\@labels, \@panels );
+ my %opts;
+ if( $self->{processor}->{action} eq "newsearch" || $self->{processor}->{action} eq "update" )
+ {
+ $opts{current} = 1;
+ }
+
+ return $repo->xhtml->tabs(\@labels, \@panels, %opts );
}
elsif( $presets_added > 0 )
{
@@ -624,7 +677,14 @@ sub render_splash_page
sub render_search_fields
{
- my( $self, $search ) = @_;
+ my( $self, $search, $formid ) = @_;
+
+ my $exp = $self->{session}->param( "exp" );
+ my $sconf = $self->{session}->param( "sconf" );
+ if( defined $exp && defined $sconf && $sconf eq $formid )
+ {
+ $search->from_string( $exp );
+ }
my $frag = $self->{session}->make_doc_fragment;
foreach my $sf ( $search->get_non_filter_searchfields )
@@ -645,17 +705,30 @@ sub render_search_fields
sub render_controls
{
- my( $self ) = @_;
+ my( $self, $with_js ) = @_;
my $div = $self->{session}->make_element(
"div" ,
class => "ep_search_buttons" );
$div->appendChild( $self->{session}->render_action_buttons(
- _order => [ "search", "newsearch" ],
- newsearch => $self->{session}->phrase( "lib/searchexpression:action_reset" ),
+ _order => [ "search" ],
+ #newsearch => $self->{session}->phrase( "lib/searchexpression:action_reset" ),
search => $self->{session}->phrase( "lib/searchexpression:action_search" ) )
);
+
+ my $xml = $self->{session}->xml;
+
+ if( $with_js )
+ {
+ my $clear_form = $div->appendChild( $self->render_clearform( $xml ) );
+ }
+ my $clear_btn = $div->appendChild( $xml->create_element( "button",
+ type => "button",
+ onclick => "clearForm();",
+ class => "ep_form_action_button clear_button",
+ ) );
+ $clear_btn->appendChild( $xml->create_text_node( $self->{session}->html_phrase( "lib/searchexpression:action_reset" ) ) );
return $div;
}
@@ -665,7 +738,7 @@ sub render
# if users access Screen::Report directly we want to display some sort of menu
# where users can select viewable reports
- if( "EPrints::Plugin::".$self->get_id eq __PACKAGE__ && $self->{processor}->{action} ne "search" )
+ if( ( "EPrints::Plugin::".$self->get_id eq __PACKAGE__ && $self->{processor}->{action} ne "search" ) || $self->{processor}->{action} eq "newsearch" )
{
return $self->render_splash_page;
}
@@ -678,6 +751,11 @@ sub render
$chunk->appendChild( $self->render_group_options );
$chunk->appendChild( $self->render_sort_options );
+ if( $self->{processor}->{action} eq "search" )
+ {
+ $chunk->appendChild( $self->render_refine_search );
+ }
+
my $items = $self->items;
if( !defined $items || $items->count == 0 )
{
@@ -745,6 +823,12 @@ document.observe("dom:loaded", function() {
EOJ
$chunk->appendChild( $repo->make_element( 'div', class => 'ep_report_page', id => $container_id ) );
+ #show search controls after the results too
+ if( $self->{processor}->{action} eq "search" )
+ {
+ $chunk->appendChild( $self->render_refine_search );
+ }
+
return $chunk;
}
@@ -798,15 +882,31 @@ sub render_export_bar
labels => {map { $_->get_subtype => $_->get_name } @plugins},
) );
-
#create labels and panels for tabbed interfaced
my $xml = $repo->xml;
my $xhtml = $repo->xhtml;
+ my $select_all = $form->appendChild( $self->render_selectall( $xml ) );
+ my $select_btn = $form->appendChild( $xml->create_element( "button",
+ type => "button",
+ onclick => "toggleCheckboxes();",
+ class => "ep_form_action_button select_button",
+ ) );
+ $select_btn->appendChild( $xml->create_text_node( $repo->html_phrase( "report_select" ) ) );
+
#allow user to choose which fields they want to export
my $export_options = $repo->make_element( "div" );
- foreach my $key ( keys %{$repo->config( $self->{export_conf}, "exportfields" )} )
+ my @keys;
+ if( defined $repo->config( $self->{export_conf}, "exportfield_order" ) )
+ {
+ @keys = @{$repo->config( $self->{export_conf}, "exportfield_order" )};
+ }
+ else
+ {
+ @keys = keys %{$repo->config( $self->{export_conf}, "exportfields" )};
+ }
+ foreach my $key ( @keys )
{
#create a new list
my $ul = $repo->make_element( "ul",
@@ -928,7 +1028,6 @@ sub render_sort_options
return $chunk;
}
-
sub render_group_options
{
my( $self ) = @_;
@@ -1008,6 +1107,56 @@ sub render_group_options
return $chunk;
}
+sub render_refine_search
+{
+ my( $self ) = @_;
+
+ my $repo = $self->repository;
+
+ my $chunk = $repo->make_doc_fragment;
+
+ if( defined $repo->param( "search" ) || $self->{processor}->{action} eq "search" )
+ {
+ my $escexp = $self->{processor}->{search}->serialise;
+ my $cacheid = $repo->param( "cache" );
+ my $sconf = $self->{sconf};
+
+ #set up new search link
+ my $new_baseurl = URI->new( $self->{session}->get_uri );
+ $new_baseurl->query_form(
+ screen => "Report",
+ sconf => $sconf,
+ );
+
+ my $search_links = $repo->make_doc_fragment;
+ my $new_link = $repo->render_link( "$new_baseurl&_action_newsearch=1" );
+ $new_link->appendChild( $repo->html_phrase( "lib/searchexpression:new" ) );
+ $search_links->appendChild( $new_link );
+
+ #add a separator...
+ $search_links->appendChild( $repo->html_phrase( "Update/Views:group_seperator" ) );
+
+ #set up refine search link
+ my $refine_baseurl = URI->new( $self->{session}->get_uri );
+ $refine_baseurl->query_form(
+ cache => $cacheid,
+ exp => $escexp,
+ screen => "Report",
+ dataset => $self->{datasetid},
+ order => $self->{processor}->{search}->{custom_order},
+ sconf => $sconf,
+ );
+
+ my $refine_link = $repo->render_link( "$refine_baseurl&_action_update=1" );
+ $refine_link->appendChild( $repo->html_phrase( "lib/searchexpression:refine" ) );
+ $search_links->appendChild( $refine_link );
+
+ $chunk->appendChild( $repo->html_phrase( "Report:search_links", links=>$search_links ) );
+ }
+
+ return $chunk;
+}
+
#adds a new checkbox to allow the user to choose which fields to export
sub _export_field_checkbox
@@ -1074,9 +1223,16 @@ sub export_plugins
my( $self, $generic ) = @_;
my @plugin_ids;
- if( $generic )
+
+ my $repo = $self->repository;
+
+ if( defined $repo->config( $self->{export_conf}, "export_plugins" ) )
{
- @plugin_ids = $self->repository->plugin_list(
+ @plugin_ids = @{$repo->config( $self->{export_conf}, "export_plugins" )};
+ }
+ elsif( $generic )
+ {
+ @plugin_ids = $repo->plugin_list(
type => "Export",
can_accept => "report/generic",
is_visible => "staff",
@@ -1085,7 +1241,7 @@ sub export_plugins
}
else
{
- @plugin_ids = $self->repository->plugin_list(
+ @plugin_ids = $repo->plugin_list(
type => "Export",
can_accept => "report/".$self->get_report,
is_visible => "staff",
@@ -1095,7 +1251,7 @@ sub export_plugins
my @plugins;
foreach my $id ( @plugin_ids )
{
- my $p = $self->repository->plugin( "$id" ) or next;
+ my $p = $repo->plugin( "$id" ) or next;
push @plugins, $p;
}
@@ -1322,4 +1478,85 @@ sub _make_grouped_item
return \%group;
}
+sub render_selectall
+{
+ my( $self, $xml ) = @_;
+
+ my $toggle_function = '
+ var isChecked = true;
+ function toggleCheckboxes() {
+ var export_options = document.getElementsByClassName("report_export_options");
+ for( export_option of export_options )
+ {
+ var checkboxes = export_option.getElementsByTagName( "input" )
+ for( checkbox of checkboxes )
+ {
+ if(isChecked)
+ {
+ checkbox.checked = "";
+ }
+ else
+ {
+ checkbox.checked = "checked";
+ }
+ }
+ }
+ isChecked = !isChecked;
+ }';
+
+ my $js_tag = $xml->create_element( "script" );
+ $js_tag->appendChild( $xml->create_text_node( $toggle_function ) );
+ return $js_tag;
+}
+
+sub render_clearform
+{
+ my( $self, $xml ) = @_;
+
+ my $clear_function = '
+ function clearForm(){
+ var report = document.getElementById( "custom_report" );
+ var form = report.getElementsByClassName("selected_form")[0];
+ var inputs = form.getElementsByTagName( "input" );
+ for( input of inputs )
+ {
+ field_type = input.type.toLowerCase();
+ console.log(field_type);
+ switch (field_type)
+ {
+ case "text":
+ case "textarea":
+ input.value = "";
+ break;
+ case "radio":
+ case "checkbox":
+ if (input.checked)
+ {
+ input.checked = false;
+ }
+ break;
+ case "select-one":
+ case "select-multi":
+ input.selectedIndex = -1;
+ break;
+ default:
+ break;
+ }
+ }
+ var selects = form.getElementsByTagName( "select" );
+ for( select of selects )
+ {
+ if( select.hasAttribute("multiple") )
+ {
+ select.selectedIndex = -1;
+ }
+ }
+
+ }';
+
+ my $js_tag = $xml->create_element( "script" );
+ $js_tag->appendChild( $xml->create_text_node( $clear_function ) );
+ return $js_tag;
+}
+
1;
diff --git a/lib/static/javascript/auto/reports.js b/lib/static/javascript/auto/reports.js
index bd01842..be9b2d3 100644
--- a/lib/static/javascript/auto/reports.js
+++ b/lib/static/javascript/auto/reports.js
@@ -35,7 +35,7 @@ var onFormSelect = function(){
{
//hide the form
$(elem).hide();
-
+ $(elem).removeClassName("selected_form");
$(elem).select('input').each(function (input)
{
$(input).setAttribute("disabled", "disabled");
@@ -44,6 +44,7 @@ var onFormSelect = function(){
//show the form we want
$(formid).show();
+ $(formid).addClassName("selected_form");
//enable this form's input elements
$(formid).select('input').each(function (input)
@@ -116,7 +117,7 @@ var EPrints_Screen_Report_Loader = Class.create({
var seen_ids = {};
this.no_items = this.ids.length;
this.retrieved = [];
- if( !Number.isInteger(this.ids[0]) ) //ids have been grouped
+ if( !isInteger(this.ids[0]) ) //ids have been grouped
{
grouped = true;
this.grouped_ids = this.ids;
@@ -395,3 +396,7 @@ function sort_report(sort)
document.sort_report.sort.value = sort;
document.sort_report.submit();
}
+
+function isInteger(num) {
+ return (num ^ 0) === num;
+}
diff --git a/lib/static/style/auto/reports.css b/lib/static/style/auto/reports.css
index c19165d..bf92297 100644
--- a/lib/static/style/auto/reports.css
+++ b/lib/static/style/auto/reports.css
@@ -99,6 +99,21 @@ div#ep_report_export_content_inner .report_export_options ul
padding: 0 10px 0 0;
}
+#ep_report_export_content_inner .select_button
+{
+ float: right;
+}
+
+#custom_report .ep_search_buttons > div
+{
+ display: inline-block;
+}
+
+#custom_report .ep_search_buttons .clear_button
+{
+ margin-left: 2px;
+}
+
/* HTML Reports */
a.html_report_print{
text-decoration: none;
diff --git a/reports.epm b/reports.epm
index 25cb462..828c950 100644
--- a/reports.epm
+++ b/reports.epm
@@ -42,9 +42,9 @@ cGxlX2ZpZWxkcyB9Owo=
epm/reports/cfg/cfg.d/z_reports.pl
text/plain
- 334237b831581075209dbbedf084d878
+ 48c622ad150bea255ba6fbee7e37083b
MD5
- 2609
+ 2869
IwojIEVQcmludHMgU2VydmljZXMgLSBHZW5lcmljIFJlcG9ydGluZyBTeXN0ZW0KIwojIFZlcnNp
b246IDMuMAojCgoKJGMtPntwbHVnaW5zfXsiU2NyZWVuOjpSZXBvcnQifXtwYXJhbXN9e2Rpc2Fi
bGV9ID0gMDsKCiRjLT57cGx1Z2luc317IkV4cG9ydDo6UmVwb3J0In17cGFyYW1zfXtkaXNhYmxl
@@ -79,18 +79,23 @@ ZmF1bHRzfSA9IFsgcXcoCgllcHJpbnRpZAoJdGl0bGUKICAgICAgICBjcmVhdG9yc19uYW1lCiAg
ICAgICAgYWJzdHJhY3QKICAgICAgICBkYXRlCiAgICAgICAga2V5d29yZHMKICAgICAgICBkaXZp
c2lvbnMKICAgICAgICBzdWJqZWN0cwogICAgICAgIHR5cGUKICAgICAgICBlZGl0b3JzX25hbWUK
ICAgICAgICBpc3B1Ymxpc2hlZAogICAgICAgIHJlZmVyZWVkCiAgICAgICAgcHVibGljYXRpb24K
-CWRvY3VtZW50cy5mb3JtYXQKCWRhdGVzdGFtcAopXTsKCiNzZXQgY29uZmlnIGZvciBkZWZhdWx0
-IHVzZXIgcmVwb3J0CiRjLT57ZGF0YXNldHN9LT57dXNlcn0tPntzZWFyY2h9LT57dXNlcl9yZXBv
-cnR9ID0gJGMtPntzZWFyY2h9LT57dXNlcn07ICN1c2UgdGhlIGRlZmF1bHQgdXNlciBzZWFyY2gg
-Zm9ybQoKI3NvcnQgb3B0aW9ucyBmb3Igc29ydGluZyB3aXRoaW4gZWFjaCBncm91cAokYy0+e3Vz
-ZXJfcmVwb3J0fS0+e3NvcnRmaWVsZHN9ID0gewogICAgICAgICJieW5hbWUiID0+ICJuYW1lIiwK
-fTsKCiNleHBvcnQgZmllbGQgb3B0aW9ucwokYy0+e3VzZXJfcmVwb3J0fS0+e2V4cG9ydGZpZWxk
-c30gPSB7CiAgICAgICAgdXNlcl9yZXBvcnRfY29yZSA9PiBbIHF3KAogICAgICAgIAluYW1lCgkJ
-dXNlcm5hbWUKCQl1c2VyaWQKCQlkZXB0CgkJb3JnCgkJYWRkcmVzcwoJCWNvdW50ZXIKCQl1c2Vy
-dHlwZQoJCWVtYWlsCgkpXSwKfTsKCgokYy0+e3VzZXJfcmVwb3J0fS0+e2V4cG9ydGZpZWxkX2Rl
-ZmF1bHRzfSA9IFsgcXcoCiAgICAgICAgbmFtZQoJdXNlcm5hbWUKCXVzZXJpZAoJZGVwdAoJb3Jn
-CglhZGRyZXNzCgljb3VudGVyCgl1c2VydHlwZQoJZW1haWwKKV07CgoKcHVzaCBAeyRjLT57dXNl
-cl9yb2xlc30tPnthZG1pbn19LCBxd3sKICAgICAgICArcmVwb3J0Cn07Cgo=
+CWRvY3VtZW50cy5mb3JtYXQKCWRhdGVzdGFtcAopXTsKCiNzZXQgb3JkZXIgb2YgZXhwb3J0IHBs
+dWdpbnMKJGMtPntlcHJpbnRfcmVwb3J0fS0+e2V4cG9ydF9wbHVnaW5zfSA9IFsgcXcoIEV4cG9y
+dDo6UmVwb3J0OjpDU1YgRXhwb3J0OjpSZXBvcnQ6OkhUTUwgRXhwb3J0OjpSZXBvcnQ6OkpTT04g
+KV07Cgojc2V0IGNvbmZpZyBmb3IgZGVmYXVsdCB1c2VyIHJlcG9ydAokYy0+e2RhdGFzZXRzfS0+
+e3VzZXJ9LT57c2VhcmNofS0+e3VzZXJfcmVwb3J0fSA9ICRjLT57c2VhcmNofS0+e3VzZXJ9OyAj
+dXNlIHRoZSBkZWZhdWx0IHVzZXIgc2VhcmNoIGZvcm0KCiNzb3J0IG9wdGlvbnMgZm9yIHNvcnRp
+bmcgd2l0aGluIGVhY2ggZ3JvdXAKJGMtPnt1c2VyX3JlcG9ydH0tPntzb3J0ZmllbGRzfSA9IHsK
+ICAgICAgICAiYnluYW1lIiA9PiAibmFtZSIsCn07CgojZXhwb3J0IGZpZWxkIG9wdGlvbnMKJGMt
+Pnt1c2VyX3JlcG9ydH0tPntleHBvcnRmaWVsZHN9ID0gewogICAgICAgIHVzZXJfcmVwb3J0X2Nv
+cmUgPT4gWyBxdygKICAgICAgICAJbmFtZQoJCXVzZXJuYW1lCgkJdXNlcmlkCgkJZGVwdAoJCW9y
+ZwoJCWFkZHJlc3MKCQl1c2VydHlwZQoJCWVtYWlsCgkpXSwKfTsKCiRjLT57dXNlcl9yZXBvcnR9
+LT57ZXhwb3J0ZmllbGRfZGVmYXVsdHN9ID0gWyBxdygKICAgICAgICBuYW1lCgl1c2VybmFtZQoJ
+dXNlcmlkCglkZXB0CglvcmcKCWFkZHJlc3MKCXVzZXJ0eXBlCgllbWFpbAopXTsKCiNzZXQgb3Jk
+ZXIgb2YgZXhwb3J0IHBsdWdpbnMKJGMtPnt1c2VyX3JlcG9ydH0tPntleHBvcnRfcGx1Z2luc30g
+PSBbIHF3KCBFeHBvcnQ6OlJlcG9ydDo6Q1NWIEV4cG9ydDo6UmVwb3J0OjpIVE1MIEV4cG9ydDo6
+UmVwb3J0OjpKU09OICldOwoKcHVzaCBAeyRjLT57dXNlcl9yb2xlc30tPnthZG1pbn19LCBxd3sK
+ICAgICAgICArcmVwb3J0Cn07Cg==
@@ -129,9 +134,9 @@ ICAgIHNob3dfemVyb19yZXN1bHRzID0+IDEsCn07Cgo=
lang/en/phrases/reports.xml
application/xml
- 2c63892db4ecf79ed204400c9acb3f76
+ f344518160d45ccd1d1709a926d9e6d1
MD5
- 2386
+ 2563
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh
RE9DVFlQRSBwaHJhc2VzIFNZU1RFTSAiZW50aXRpZXMuZHRkIj4KPGVwcDpwaHJhc2VzIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczplcHA9Imh0dHA6Ly9lcHJpbnRz
@@ -147,41 +152,44 @@ cm91cF9ieSI+U29ydCBieTogPGVwYzpwaW4gbmFtZT0ibGlua3MiIC8+PC9kaXY+PC9lcHA6cGhy
YXNlPgo8ZXBwOnBocmFzZSBpZD0iUmVwb3J0Omdyb3VwX2xpbmtzIj48ZGl2IGNsYXNzPSJlcF92
aWV3X2dyb3VwX2J5Ij5Hcm91cCBieTogPGVwYzpwaW4gbmFtZT0ibGlua3MiIC8+PC9kaXY+PC9l
cHA6cGhyYXNlPgoKPGVwcDpwaHJhc2UgaWQ9InJlcG9ydDpub19ncm91cGluZyI+Tm8gR3JvdXBp
-bmc8L2VwcDpwaHJhc2U+Cgo8IS0tIHRoZSBFeGFtcGxlIHJlcG9ydHMgLS0+CjxlcHA6cGhyYXNl
-IGlkPSJQbHVnaW4vU2NyZWVuL1JlcG9ydC9FeGFtcGxlOnRpdGxlIj5FeGFtcGxlPC9lcHA6cGhy
-YXNlPgo8ZXBwOnBocmFzZSBpZD0iUGx1Z2luL1NjcmVlbi9SZXBvcnQvRXhhbXBsZS9BcnRpY2xl
-czp0aXRsZSI+QXJ0aWNsZXM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJQbHVnaW4vU2Ny
-ZWVuL1JlcG9ydC9FeGFtcGxlL0NvbmZlcmVuY2VJdGVtczp0aXRsZSI+Q29uZmVyZW5jZSBJdGVt
-czwvZXBwOnBocmFzZT4KCjxlcHA6cGhyYXNlIGlkPSJleHBvcnRfdGl0bGUiPkV4cG9ydCBPcHRp
-b25zPC9lcHA6cGhyYXNlPgoKPCEtLSBIVE1MIEV4cG9ydCAtLT4KPGVwcDpwaHJhc2UgaWQ9InJl
-cG9ydF9odG1sX2V4cG9ydF90aXRsZSI+UmVwb3J0PC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBp
-ZD0icmVwb3J0X2h0bWxfcHJpbnRfYnRuIj48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5wcmlu
-dCgpIiBjbGFzcz0iZXBfZm9ybV9hY3Rpb25fYnV0dG9uIGh0bWxfcmVwb3J0X3ByaW50IGVwX25v
-cHJpbnQiPlByaW50PC9hPjwvZXBwOnBocmFzZT4KCjwhLS0gRVByaW50IFJlcG9ydCAtLT4KPGVw
-cDpwaHJhc2UgaWQ9IlBsdWdpbi9TY3JlZW4vUmVwb3J0L0VQcmludDp0aXRsZSI+RVByaW50czwv
-ZXBwOnBocmFzZT4KPGVwcDpwaHJhc2UgaWQ9ImV4cG9ydGZpZWxkczplcHJpbnRfcmVwb3J0X2Nv
-cmUiPkV4cG9ydCBGaWVsZHM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJlcHJpbnRfcmVw
-b3J0OnNvcnQ6Ynl5ZWFyIj5ZZWFyPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXByaW50
-X3JlcG9ydDpzb3J0OmJ5bmFtZSI+Q3JlYXRvcnM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlk
-PSJlcHJpbnRfcmVwb3J0OnNvcnQ6Ynl0aXRsZSI+VGl0bGU8L2VwcDpwaHJhc2U+CjxlcHA6cGhy
-YXNlIGlkPSJlcHJpbnRfcmVwb3J0OnNvcnQ6YnlkaXZpc2lvbiI+RGl2aXNpb248L2VwcDpwaHJh
-c2U+Cgo8ZXBwOnBocmFzZSBpZD0iZXByaW50X3JlcG9ydDpncm91cDpkaXZpc2lvbnMiPkRpdmlz
-aW9uPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXByaW50X3JlcG9ydDpncm91cDpzdWJq
-ZWN0cyI+U3ViamVjdDwvZXBwOnBocmFzZT4KPGVwcDpwaHJhc2UgaWQ9ImVwcmludF9yZXBvcnQ6
-Z3JvdXA6dHlwZSI+SXRlbSBUeXBlPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXByaW50
-X3JlcG9ydDpncm91cDpkYXRlIj5EYXRlPC9lcHA6cGhyYXNlPgoKPCEtLSBVc2VyIFJlcG9ydCAt
-LT4KPGVwcDpwaHJhc2UgaWQ9IlBsdWdpbi9TY3JlZW4vUmVwb3J0L1VzZXI6dGl0bGUiPlVzZXJz
-PC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXhwb3J0ZmllbGRzOnVzZXJfcmVwb3J0X2Nv
-cmUiPkV4cG9ydCBGaWVsZHM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJ1c2VyX3JlcG9y
-dDpzb3J0OmJ5bmFtZSI+TmFtZTwvZXBwOnBocmFzZT4KCjwvZXBwOnBocmFzZXM+Cg==
+bmc8L2VwcDpwaHJhc2U+Cgo8ZXBwOnBocmFzZSBpZD0icmVwb3J0X3NlbGVjdCI+U2VsZWN0L0Rl
+c2VsZWN0IEFsbDwvZXBwOnBocmFzZT4KCjxlcHA6cGhyYXNlIGlkPSJSZXBvcnQ6c2VhcmNoX2xp
+bmtzIj48ZGl2IGNsYXNzPSJlcF92aWV3X2dyb3VwX2J5Ij48ZXBjOnBpbiBuYW1lPSJsaW5rcyIg
+Lz48L2Rpdj48L2VwcDpwaHJhc2U+Cgo8IS0tIHRoZSBFeGFtcGxlIHJlcG9ydHMgLS0+CjxlcHA6
+cGhyYXNlIGlkPSJQbHVnaW4vU2NyZWVuL1JlcG9ydC9FeGFtcGxlOnRpdGxlIj5FeGFtcGxlPC9l
+cHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iUGx1Z2luL1NjcmVlbi9SZXBvcnQvRXhhbXBsZS9B
+cnRpY2xlczp0aXRsZSI+QXJ0aWNsZXM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJQbHVn
+aW4vU2NyZWVuL1JlcG9ydC9FeGFtcGxlL0NvbmZlcmVuY2VJdGVtczp0aXRsZSI+Q29uZmVyZW5j
+ZSBJdGVtczwvZXBwOnBocmFzZT4KCjxlcHA6cGhyYXNlIGlkPSJleHBvcnRfdGl0bGUiPkV4cG9y
+dCBPcHRpb25zPC9lcHA6cGhyYXNlPgoKPCEtLSBIVE1MIEV4cG9ydCAtLT4KPGVwcDpwaHJhc2Ug
+aWQ9InJlcG9ydF9odG1sX2V4cG9ydF90aXRsZSI+UmVwb3J0PC9lcHA6cGhyYXNlPgo8ZXBwOnBo
+cmFzZSBpZD0icmVwb3J0X2h0bWxfcHJpbnRfYnRuIj48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRv
+dy5wcmludCgpIiBjbGFzcz0iZXBfZm9ybV9hY3Rpb25fYnV0dG9uIGh0bWxfcmVwb3J0X3ByaW50
+IGVwX25vcHJpbnQiPlByaW50PC9hPjwvZXBwOnBocmFzZT4KCjwhLS0gRVByaW50IFJlcG9ydCAt
+LT4KPGVwcDpwaHJhc2UgaWQ9IlBsdWdpbi9TY3JlZW4vUmVwb3J0L0VQcmludDp0aXRsZSI+RVBy
+aW50czwvZXBwOnBocmFzZT4KPGVwcDpwaHJhc2UgaWQ9ImV4cG9ydGZpZWxkczplcHJpbnRfcmVw
+b3J0X2NvcmUiPkV4cG9ydCBGaWVsZHM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJlcHJp
+bnRfcmVwb3J0OnNvcnQ6Ynl5ZWFyIj5ZZWFyPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0i
+ZXByaW50X3JlcG9ydDpzb3J0OmJ5bmFtZSI+Q3JlYXRvcnM8L2VwcDpwaHJhc2U+CjxlcHA6cGhy
+YXNlIGlkPSJlcHJpbnRfcmVwb3J0OnNvcnQ6Ynl0aXRsZSI+VGl0bGU8L2VwcDpwaHJhc2U+Cjxl
+cHA6cGhyYXNlIGlkPSJlcHJpbnRfcmVwb3J0OnNvcnQ6YnlkaXZpc2lvbiI+RGl2aXNpb248L2Vw
+cDpwaHJhc2U+Cgo8ZXBwOnBocmFzZSBpZD0iZXByaW50X3JlcG9ydDpncm91cDpkaXZpc2lvbnMi
+PkRpdmlzaW9uPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXByaW50X3JlcG9ydDpncm91
+cDpzdWJqZWN0cyI+U3ViamVjdDwvZXBwOnBocmFzZT4KPGVwcDpwaHJhc2UgaWQ9ImVwcmludF9y
+ZXBvcnQ6Z3JvdXA6dHlwZSI+SXRlbSBUeXBlPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0i
+ZXByaW50X3JlcG9ydDpncm91cDpkYXRlIj5EYXRlPC9lcHA6cGhyYXNlPgoKPCEtLSBVc2VyIFJl
+cG9ydCAtLT4KPGVwcDpwaHJhc2UgaWQ9IlBsdWdpbi9TY3JlZW4vUmVwb3J0L1VzZXI6dGl0bGUi
+PlVzZXJzPC9lcHA6cGhyYXNlPgo8ZXBwOnBocmFzZSBpZD0iZXhwb3J0ZmllbGRzOnVzZXJfcmVw
+b3J0X2NvcmUiPkV4cG9ydCBGaWVsZHM8L2VwcDpwaHJhc2U+CjxlcHA6cGhyYXNlIGlkPSJ1c2Vy
+X3JlcG9ydDpzb3J0OmJ5bmFtZSI+TmFtZTwvZXBwOnBocmFzZT4KCjwvZXBwOnBocmFzZXM+Cg==
plugins/EPrints/Plugin/Export/Grid2.pm
text/plain
- dd9b2c0a038b1f9f51b618a4b2e11c4b
+ 83d730999923d798d1acbb44c4a91667
MD5
- 9699
+ 10222
PWhlYWQxIE5BTUUKCkVQcmludHM6OlBsdWdpbjo6RXhwb3J0OjpHcmlkMgoKPWN1dAoKcGFja2Fn
ZSBFUHJpbnRzOjpQbHVnaW46OkV4cG9ydDo6R3JpZDI7Cgp1c2UgRGF0YTo6RHVtcGVyOwp1c2Ug
RVByaW50czo6UGx1Z2luOjpFeHBvcnQ7CgpASVNBID0gKCAiRVByaW50czo6UGx1Z2luOjpFeHBv
@@ -286,73 +294,82 @@ LCAkdmFsdWU7CQkJCQkJCgkJCQl9CgkJCX0KCQl9CgoJCW15ICRpID0gQHskcm93c1swXX07CgkJ
bXkgJF9yb3dzOwoJCWlmKCBFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAkZmllbGQgKSApICN3ZSBh
bHJlYWR5IGhhdmUgb3VyIHZhbHVlcwoJCXsKCQkJaWYoIHNjYWxhciBAeyRzdWJfZGF0YW9ial92
YWx1ZXN9ID4gMCApCgkJCXsKCQkJCSRfcm93cyA9ICRzZWxmLT52YWx1ZV90b19yb3dzKCRmaWVs
-ZCwgJHN1Yl9kYXRhb2JqX3ZhbHVlcyk7CQkJCgkJCX0KCQkJZWxzZSAjdGhlcmUncyBubyByZXN1
-bHRzLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBhZGQgYW4gZW1wdHkgY2VsbCB0byB0aGUgc3ByZWFk
-c2hlZXQKCQkJewoJCQkJJF9yb3dzID0gJHNlbGYtPnZhbHVlX3RvX3Jvd3MoJGZpZWxkLCB1bmRl
-Zik7CgkJCX0KCQl9CgkJZWxzZSAjd2UgbmVlZCB0byByZXRyaWV2ZSBvdXIgdmFsdWVzIGZvciB0
-aGlzIGZpZWxkIGZyb20gb3VyIGRhdGFvYmogKG9yIHN1Yl9kYXRhb2JqKQoJCXsKCQkJbXkgJHZh
-bHVlOwoJCQlpZiggZGVmaW5lZCAkb3B0c3tjdXN0b21fZXhwb3J0fSAmJiBkZWZpbmVkICRvcHRz
-e2N1c3RvbV9leHBvcnR9LT57JGZuYW1lfSApICN3ZSBoYXZlIGEgY3VzdG9tIGV4cG9ydGVyCgkJ
-CXsKCQkJCSR2YWx1ZSA9ICRvcHRze2N1c3RvbV9leHBvcnR9LT57JGZuYW1lfS0+KCAkZGF0YW9i
-aiwgJG9wdHN7cGx1Z2lufSApOwoJCQkJJF9yb3dzID0gJHNlbGYtPmN1c3RvbV92YWx1ZV90b19y
-b3dzKCAkdmFsdWUgKTsKCQkJfQoJCQllbHNlICNqdXN0IGdldCB0aGUgZmllbGQncyB1c3VhbCB2
-YWx1ZQoJCQl7CgkJCQkkZmllbGQgPSBFUHJpbnRzOjpVdGlsczo6ZmllbGRfZnJvbV9jb25maWdf
-c3RyaW5nKCAkZHMsICRmbmFtZSApOwoJCQkJaWYoICRmaWVsZC0+Z2V0X3Byb3BlcnR5KCAidmly
-dHVhbCIgKSApICN2aXJ0dWFsIGZpZWxkcyBuZWVkIHJlbmRlcmluZwoJCQkJewoJCQkJCSR2YWx1
-ZSA9IEVQcmludHM6OlV0aWxzOjp0cmVlX3RvX3V0ZjgoICRkYXRhb2JqLT5yZW5kZXJfdmFsdWUo
-ICRmbmFtZSApICk7CgkJCQl9CgkJCQllbHNlICNyZWd1bGFyIGZpZWxkIHZhbHVlcyBjYW4gc2lt
-cGx5IGJlIHJldHJpZXZlZAoJCQkJewoJCQkJCSR2YWx1ZSA9ICRmaWVsZC0+Z2V0X3ZhbHVlKCAk
-ZGF0YW9iaiApOwoJCQkJfQoJCQkJJF9yb3dzID0gJHNlbGYtPnZhbHVlX3RvX3Jvd3MoJGZpZWxk
-LCAkdmFsdWUpOyAJCQoJCQl9CQkJCgkJfQoKCQlmb3JlYWNoIG15ICRqICgwLi4kIyRfcm93cykK
-CQl7CgkJCWZvcmVhY2ggbXkgJF9pICgwLi4kI3skX3Jvd3MtPlskal19KQoJCQl7CgkJCQkkcm93
-c1skal1bJGkrJF9pXSA9ICRfcm93cy0+WyRqXVskX2ldOwoJCQl9CgkJfQoJfQoKCSMgZ2VuZXJh
-dGUgY29tcGxldGUgcm93cwoJaWYoJG9wdHN7cGx1Z2lufS0+cGFyYW0oICJtdWx0aWxpbmVfcmVw
-ZWF0IiApKSAjd2Ugd2FudCBlYWNoIGNvbHVtbiB0byByZXBlYXQgZm9yIGVhY2ggcm93Cgl7CgkJ
-Zm9yZWFjaCBteSAkaSAoMC4uKHNjYWxhciBAcm93cyktMSkKCQl7CgkJCWZvcmVhY2ggbXkgJGog
-KDAuLiQjeyRyb3dzWzBdfSkKCQkJewoJCQkJJHJvd3NbJGldWyRqXSB8fD0gJHJvd3NbMF1bJGpd
-OwoJCQl9CQoJCX0KCX0KCWVsc2UgI3dlIGRvbid0IHdhbnQgcmVwZWF0aW5nIHZhbHVlcyBpbiB0
-aGUgY29sdW1ucwoJewkKCQlmb3IoQHJvd3MpIHsKCQkJJF8tPlswXSA9ICRyb3dzWzBdWzBdOyAj
-Zmlyc3QgZWxlbWVudCBvZiB0aGlzIGFycmF5IGVxdWFscyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0
-aGUgZmlyc3Qgcm93CgkJCSRfLT5bJCN7JHJvd3NbMF19XSB8fD0gdW5kZWY7CgkJfQoKCX0KCgly
-ZXR1cm4gXEByb3dzOwp9CgpzdWIgdmFsdWVfdG9fcm93cwp7CglteSAoJHNlbGYsICRmaWVsZCwg
-JHZhbHVlKSA9IEBfOwoKCW15IEByb3dzOwoKCWlmIChyZWYoJHZhbHVlKSBlcSAiQVJSQVkiKQoJ
-ewoJCSR2YWx1ZSA9IFskZmllbGQtPmVtcHR5X3ZhbHVlXSBpZiAhQCR2YWx1ZTsKCQlAcm93cyA9
-IG1hcCB7ICRzZWxmLT52YWx1ZV90b19yb3dzKCRmaWVsZCwgJF8pLT5bMF0gfSBAJHZhbHVlOwoJ
-fQoJZWxzaWYgKCRmaWVsZC0+aXNhKCJFUHJpbnRzOjpNZXRhRmllbGQ6Ok11bHRpcGFydCIpKQoJ
-ewoJCWlmKCAkZmllbGQtPmlzYSggIkVQcmludHM6Ok1ldGFGaWVsZDo6TmFtZSIgKSkgI25lZWQg
-dG8gZGVhbCB3aXRoIGxlZ2FjeSBwaHJhc2UgaWQncwogICAgICAgICAgICAgICAgewoJCQlteSBA
-Yml0X3ZhbHVlczsKCQkJZm9yZWFjaCBteSAkYml0ICggJGZpZWxkLT5nZXRfaW5wdXRfYml0cygp
-ICkKICAgICAgICAgICAgICAgICAgICAgICAgewoJCQkJcHVzaCBAYml0X3ZhbHVlcywgJHZhbHVl
-LT57JGJpdH07CiAgICAgICAgCQl9CQoJCQlwdXNoIEByb3dzLCBcQGJpdF92YWx1ZXM7CgkgICAg
-ICAgIH0KCQllbHNlCgkJewoJCQlwdXNoIEByb3dzLCBbbWFwIHsgJHZhbHVlLT57JF8tPntzdWJf
-bmFtZX19IH0gQHskZmllbGQtPnByb3BlcnR5KCJmaWVsZHNfY2FjaGUiKX1dOwoJCX0KCX0KCWVs
-c2lmICgkZmllbGQtPmlzYSgiRVByaW50czo6TWV0YUZpZWxkOjpDb21wb3VuZCIpKQoJewoJCW15
-IEBzdWJfdmFsdWVzOwoJCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAleyR2YWx1ZX0pCgkJewoJCQlw
-dXNoIEBzdWJfdmFsdWVzLCAkdmFsdWUtPnska2V5fTsKCQl9CgkJcHVzaCBAcm93cywgXEBzdWJf
-dmFsdWVzOwoJfQoJZWxzZQoJewoJCXB1c2ggQHJvd3MsIFskdmFsdWVdOwoJfQoKCXJldHVybiBc
-QHJvd3M7Cn0KCiN1c2VkIGZvciBjdXN0b20gZXhwb3J0cyB0aGF0IG1pZ2h0IHJldHVybiBhIGZp
-ZWxkIG9yIGFuIGFycmF5IChidXQgYXJlbid0IG5lY2VzYXJpbHkgYXNzb2NpYXRlZCB3aXRoIGEg
-ZmllbGQhKQpzdWIgY3VzdG9tX3ZhbHVlX3RvX3Jvd3MKewogICAgICAgIG15ICgkc2VsZiwgJHZh
-bHVlKSA9IEBfOwoKICAgICAgICBteSBAcm93czsKCiAgICAgICAgaWYgKHJlZigkdmFsdWUpIGVx
-ICJBUlJBWSIpCiAgICAgICAgewogICAgICAgICAgICAgICAgQHJvd3MgPSBtYXAgeyAkc2VsZi0+
-Y3VzdG9tX3ZhbHVlX3RvX3Jvd3MoJF8pLT5bMF0gfSBAJHZhbHVlOwogICAgICAgIH0KICAgICAg
-ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgcHVzaCBAcm93cywgWyR2YWx1ZV07CiAg
-ICAgICAgfQoKICAgICAgICByZXR1cm4gXEByb3dzOwp9CgoKMTsKCj1oZWFkMSBDT1BZUklHSFQK
-Cj1mb3IgQ09QWVJJR0hUIEJFR0lOCgpDb3B5cmlnaHQgMjAwMC0yMDExIFVuaXZlcnNpdHkgb2Yg
-U291dGhhbXB0b24uCgo9Zm9yIENPUFlSSUdIVCBFTkQKCj1mb3IgTElDRU5TRSBCRUdJTgoKVGhp
-cyBmaWxlIGlzIHBhcnQgb2YgRVByaW50cyBMPGh0dHA6Ly93d3cuZXByaW50cy5vcmcvPi4KCkVQ
-cmludHMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
-ZGlmeSBpdAp1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
-TGljZW5zZSBhcyBwdWJsaXNoZWQKYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0
-aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
-ZXIgdmVyc2lvbi4KCkVQcmludHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
-aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
-IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCkZJVE5FU1MgRk9SIEEgUEFS
-VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkxpY2Vu
-c2UgZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
-dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBhbG9uZyB3aXRoIEVQcmludHMu
-ICBJZiBub3QsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKPWZvciBMSUNF
-TlNFIEVORAoK
+ZCwgJHN1Yl9kYXRhb2JqX3ZhbHVlcywgJGRhdGFvYmopOwkJCQoJCQl9CgkJCWVsc2UgI3RoZXJl
+J3Mgbm8gcmVzdWx0cywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gYWRkIGFuIGVtcHR5IGNlbGwgdG8g
+dGhlIHNwcmVhZHNoZWV0CgkJCXsKCQkJCSRfcm93cyA9ICRzZWxmLT52YWx1ZV90b19yb3dzKCRm
+aWVsZCwgdW5kZWYpOwoJCQl9CgkJfQoJCWVsc2UgI3dlIG5lZWQgdG8gcmV0cmlldmUgb3VyIHZh
+bHVlcyBmb3IgdGhpcyBmaWVsZCBmcm9tIG91ciBkYXRhb2JqIChvciBzdWJfZGF0YW9iaikKCQl7
+CgkJCW15ICR2YWx1ZTsKCQkJaWYoIGRlZmluZWQgJG9wdHN7Y3VzdG9tX2V4cG9ydH0gJiYgZGVm
+aW5lZCAkb3B0c3tjdXN0b21fZXhwb3J0fS0+eyRmbmFtZX0gKSAjd2UgaGF2ZSBhIGN1c3RvbSBl
+eHBvcnRlcgoJCQl7CgkJCQkkdmFsdWUgPSAkb3B0c3tjdXN0b21fZXhwb3J0fS0+eyRmbmFtZX0t
+PiggJGRhdGFvYmosICRvcHRze3BsdWdpbn0gKTsKCQkJCSRfcm93cyA9ICRzZWxmLT5jdXN0b21f
+dmFsdWVfdG9fcm93cyggJHZhbHVlICk7CgkJCX0KCQkJZWxzZSAjanVzdCBnZXQgdGhlIGZpZWxk
+J3MgdXN1YWwgdmFsdWUKCQkJewoJCQkJJGZpZWxkID0gRVByaW50czo6VXRpbHM6OmZpZWxkX2Zy
+b21fY29uZmlnX3N0cmluZyggJGRzLCAkZm5hbWUgKTsKCQkJCWlmKCAkZmllbGQtPmdldF9wcm9w
+ZXJ0eSggInZpcnR1YWwiICkgKSAjdmlydHVhbCBmaWVsZHMgbmVlZCByZW5kZXJpbmcKCQkJCXsK
+CQkJCQkkdmFsdWUgPSBFUHJpbnRzOjpVdGlsczo6dHJlZV90b191dGY4KCAkZGF0YW9iai0+cmVu
+ZGVyX3ZhbHVlKCAkZm5hbWUgKSApOwoJCQkJfQoJCQkJZWxzZSAjcmVndWxhciBmaWVsZCB2YWx1
+ZXMgY2FuIHNpbXBseSBiZSByZXRyaWV2ZWQKCQkJCXsKCQkJCQkkdmFsdWUgPSAkZmllbGQtPmdl
+dF92YWx1ZSggJGRhdGFvYmogKTsKCQkJCX0KCQkJCSRfcm93cyA9ICRzZWxmLT52YWx1ZV90b19y
+b3dzKCRmaWVsZCwgJHZhbHVlLCAkZGF0YW9iaik7IAkJCgkJCX0JCQkKCQl9CgoJCWZvcmVhY2gg
+bXkgJGogKDAuLiQjJF9yb3dzKQoJCXsKCQkJZm9yZWFjaCBteSAkX2kgKDAuLiQjeyRfcm93cy0+
+WyRqXX0pCgkJCXsKCQkJCSRyb3dzWyRqXVskaSskX2ldID0gJF9yb3dzLT5bJGpdWyRfaV07CgkJ
+CX0KCQl9Cgl9CgoJIyBnZW5lcmF0ZSBjb21wbGV0ZSByb3dzCglpZigkb3B0c3twbHVnaW59LT5w
+YXJhbSggIm11bHRpbGluZV9yZXBlYXQiICkpICN3ZSB3YW50IGVhY2ggY29sdW1uIHRvIHJlcGVh
+dCBmb3IgZWFjaCByb3cKCXsKCQlmb3JlYWNoIG15ICRpICgwLi4oc2NhbGFyIEByb3dzKS0xKQoJ
+CXsKCQkJZm9yZWFjaCBteSAkaiAoMC4uJCN7JHJvd3NbMF19KQoJCQl7CgkJCQkkcm93c1skaV1b
+JGpdIHx8PSAkcm93c1swXVskal07CgkJCX0JCgkJfQoJfQoJZWxzZSAjd2UgZG9uJ3Qgd2FudCBy
+ZXBlYXRpbmcgdmFsdWVzIGluIHRoZSBjb2x1bW5zCgl7CQoJCWZvcihAcm93cykgewoJCQkkXy0+
+WzBdID0gJHJvd3NbMF1bMF07ICNmaXJzdCBlbGVtZW50IG9mIHRoaXMgYXJyYXkgZXF1YWxzIHRo
+ZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBmaXJzdCByb3cKCQkJJF8tPlskI3skcm93c1swXX1dIHx8
+PSB1bmRlZjsKCQl9CgoJfQoKCXJldHVybiBcQHJvd3M7Cn0KCnN1YiB2YWx1ZV90b19yb3dzCnsK
+CW15ICgkc2VsZiwgJGZpZWxkLCAkdmFsdWUsICRkYXRhb2JqKSA9IEBfOwoKCW15IEByb3dzOwoK
+CWlmIChyZWYoJHZhbHVlKSBlcSAiQVJSQVkiKQoJewoJCSR2YWx1ZSA9IFskZmllbGQtPmVtcHR5
+X3ZhbHVlXSBpZiAhQCR2YWx1ZTsKCQlAcm93cyA9IG1hcCB7ICRzZWxmLT52YWx1ZV90b19yb3dz
+KCRmaWVsZCwgJF8sICRkYXRhb2JqKS0+WzBdIH0gQCR2YWx1ZTsKCX0KCWVsc2lmICgkZmllbGQt
+PmlzYSgiRVByaW50czo6TWV0YUZpZWxkOjpNdWx0aXBhcnQiKSkKCXsKCQlpZiggJGZpZWxkLT5p
+c2EoICJFUHJpbnRzOjpNZXRhRmllbGQ6Ok5hbWUiICkpICNuZWVkIHRvIGRlYWwgd2l0aCBsZWdh
+Y3kgcGhyYXNlIGlkJ3MKICAgICAgICAgICAgICAgIHsKCQkJbXkgQGJpdF92YWx1ZXM7CgkJCWZv
+cmVhY2ggbXkgJGJpdCAoICRmaWVsZC0+Z2V0X2lucHV0X2JpdHMoKSApCiAgICAgICAgICAgICAg
+ICAgICAgICAgIHsKCQkJCXB1c2ggQGJpdF92YWx1ZXMsICR2YWx1ZS0+eyRiaXR9OwogICAgICAg
+IAkJfQkKCQkJcHVzaCBAcm93cywgXEBiaXRfdmFsdWVzOwoJICAgICAgICB9CgkJZWxzZQoJCXsK
+CQkJcHVzaCBAcm93cywgW21hcCB7ICR2YWx1ZS0+eyRfLT57c3ViX25hbWV9fSB9IEB7JGZpZWxk
+LT5wcm9wZXJ0eSgiZmllbGRzX2NhY2hlIil9XTsKCQl9Cgl9CgllbHNpZiAoJGZpZWxkLT5pc2Eo
+IkVQcmludHM6Ok1ldGFGaWVsZDo6Q29tcG91bmQiKSkKCXsKCQlteSBAc3ViX3ZhbHVlczsKCQlm
+b3JlYWNoIG15ICRrZXkgKGtleXMgJXskdmFsdWV9KQoJCXsKCQkJcHVzaCBAc3ViX3ZhbHVlcywg
+JHZhbHVlLT57JGtleX07CgkJfQoJCXB1c2ggQHJvd3MsIFxAc3ViX3ZhbHVlczsKCX0KCWVsc2lm
+KCAkZmllbGQtPmlzYSgiRVByaW50czo6TWV0YUZpZWxkOjpTdWJqZWN0IikpCiAgICAgICAgewog
+ICAgICAgICAgICAgICAgaWYoICR2YWx1ZSBuZSAiIiApCiAgICAgICAgICAgICAgICB7CiAgICAg
+ICAgICAgICAgICAgICAgICAgIHB1c2ggQHJvd3MsIFskZmllbGQtPnJlbmRlcl9zaW5nbGVfdmFs
+dWUoICRmaWVsZC0+cmVwb3NpdG9yeSwgJHZhbHVlICldOwogICAgICAgICAgICAgICAgfQogICAg
+ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
+ICBwdXNoIEByb3dzLCBbJHZhbHVlXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgllbHNp
+ZiggISRmaWVsZC0+aXNhKCJFUHJpbnRzOjpNZXRhRmllbGQ6OlN1Ym9iamVjdCIpICYmICRmaWVs
+ZC0+aXNfdmlydHVhbCApCgl7CgkJcHVzaCBAcm93cywgWyRkYXRhb2JqLT5yZW5kZXJfdmFsdWUo
+ICRmaWVsZC0+bmFtZSApXTsKCX0KCWVsc2UKCXsKCQlwdXNoIEByb3dzLCBbJHZhbHVlXTsKCX0K
+CglyZXR1cm4gXEByb3dzOwp9CgojdXNlZCBmb3IgY3VzdG9tIGV4cG9ydHMgdGhhdCBtaWdodCBy
+ZXR1cm4gYSBmaWVsZCBvciBhbiBhcnJheSAoYnV0IGFyZW4ndCBuZWNlc2FyaWx5IGFzc29jaWF0
+ZWQgd2l0aCBhIGZpZWxkISkKc3ViIGN1c3RvbV92YWx1ZV90b19yb3dzCnsKICAgICAgICBteSAo
+JHNlbGYsICR2YWx1ZSkgPSBAXzsKCiAgICAgICAgbXkgQHJvd3M7CgogICAgICAgIGlmIChyZWYo
+JHZhbHVlKSBlcSAiQVJSQVkiKQogICAgICAgIHsKICAgICAgICAgICAgICAgIEByb3dzID0gbWFw
+IHsgJHNlbGYtPmN1c3RvbV92YWx1ZV90b19yb3dzKCRfKS0+WzBdIH0gQCR2YWx1ZTsKICAgICAg
+ICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1c2ggQHJvd3MsIFsk
+dmFsdWVdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxAcm93czsKfQoKCjE7Cgo9aGVhZDEg
+Q09QWVJJR0hUCgo9Zm9yIENPUFlSSUdIVCBCRUdJTgoKQ29weXJpZ2h0IDIwMDAtMjAxMSBVbml2
+ZXJzaXR5IG9mIFNvdXRoYW1wdG9uLgoKPWZvciBDT1BZUklHSFQgRU5ECgo9Zm9yIExJQ0VOU0Ug
+QkVHSU4KClRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVQcmludHMgTDxodHRwOi8vd3d3LmVwcmludHMu
+b3JnLz4uCgpFUHJpbnRzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
+IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
+YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
+YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlv
+bikgYW55IGxhdGVyIHZlcnNpb24uCgpFUHJpbnRzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
+IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91
+dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgpGSVRORVNT
+IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
+YmxpYwpMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
+YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgYWxvbmcgd2l0
+aCBFUHJpbnRzLiAgSWYgbm90LCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K
+Cj1mb3IgTElDRU5TRSBFTkQKCg==
@@ -621,9 +638,9 @@ dGF0aW9uX2xpbmsgKTsKCiAgICAgICAgcmV0dXJuICRwOwp9CgoxOyAgICAgICAgCg==
plugins/EPrints/Plugin/Export/Report/JSON.pm
text/plain
- 3ee98189aee3464f0992881814056a72
+ 3786d272e437a488408e5825270e1609
MD5
- 6567
+ 6648
cGFja2FnZSBFUHJpbnRzOjpQbHVnaW46OkV4cG9ydDo6UmVwb3J0OjpKU09OOwoKdXNlIEVQcmlu
dHM6OlBsdWdpbjo6RXhwb3J0OjpSZXBvcnQ7CkBJU0EgPSAoICJFUHJpbnRzOjpQbHVnaW46OkV4
cG9ydDo6UmVwb3J0IiApOwoKdXNlIHN0cmljdDsKCnN1YiBuZXcKewoJbXkoICRjbGFzcywgJXBh
@@ -717,688 +734,810 @@ ICAgfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJbXkgJGZpZWxkID0gJHNlbGYtPntkYXRhc2V0fS0+
Z2V0X2ZpZWxkKCAkZmllbGRuYW1lICk7CgkgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGlm
ICEkZmllbGQtPmdldF9wcm9wZXJ0eSggImV4cG9ydF9hc194bWwiICk7CiAgICAgICAgCSAgICAg
ICAgICAgICAgICBuZXh0IGlmIGRlZmluZWQgJGZpZWxkLT57c3ViX25hbWV9OwoJCQkJbXkgJHZh
-bHVlID0gJGZpZWxkLT5nZXRfdmFsdWUoICRlcGRhdGEgKTsKCQkJCWlmKCBleGlzdHMgJHJlcG8t
-PmNvbmZpZyggJHNlbGYtPntyZXBvcnR9LT57ZXhwb3J0X2NvbmZ9LCAiY3VzdG9tX2V4cG9ydCIg
-KS0+eyRmaWVsZC0+Z2V0X25hbWV9ICkKICAgICAgICAJICAgICAgICAgICAgICAgIHsKCQkJCQkk
-dmFsdWUgPSAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e3JlcG9ydH0tPntleHBvcnRfY29uZn0sICJj
-dXN0b21fZXhwb3J0IiApLT57JGZpZWxkLT5nZXRfbmFtZX0tPiggJGVwZGF0YSwgJHNlbGYtPnty
-ZXBvcnR9ICk7CgkJCQl9CgkJCQlpZiggZGVmaW5lZCAkZmllbGQtPnt2aXJ0dWFsfSApCgkJCQl7
-CgkJCQkJJHZhbHVlID0gRVByaW50czo6VXRpbHM6OnRyZWVfdG9fdXRmOCggJGVwZGF0YS0+cmVu
-ZGVyX3ZhbHVlKCAkZmllbGQtPmdldF9uYW1lICkgKTsKCQkJCX0KCQkgICAgICAgICAgICAgICAg
-bmV4dCBpZiAhRVByaW50czo6VXRpbHM6OmlzX3NldCggJHZhbHVlICk7CiAgICAgICAgCSAgICAg
-ICAgICAgICAgICAkc3ViZGF0YS0+eyRmaWVsZC0+Z2V0X25hbWV9ID0gJHZhbHVlOwoJCQl9CiAg
-ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc3ViZGF0YS0+e3VyaX0gPSAkZXBkYXRh
-LT51cmk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRzZWxmLT5fZXBkYXRhX3RvX2pzb24oICRz
-dWJkYXRhLCAkZGVwdGggKyAxLCAwLCAlb3B0cyApOwogICAgICAgIH0KfQoKCnN1YiBlc2NhcGVf
-dmFsdWUKewoJbXkoICRwbHVnaW4sICR2YWx1ZSApID0gQF87CgoJcmV0dXJuICciIicgdW5sZXNz
-KCBkZWZpbmVkIEVQcmludHM6OlV0aWxzOjppc19zZXQoICR2YWx1ZSApICk7CgoJIyBzdHJpcHMg
-YW55IGtpbmQgb2YgZG91YmxlLXF1b3RlczoKCSR2YWx1ZSA9fiBzL1x4OTN8XHg5NHwiLycvZzsK
-CSMgYW5kIGNvbnRyb2wtY2hhcmFjdGVycwoJJHZhbHVlID1+IHMvXG58XHJ8XHQvL2c7CgoJIyBp
-ZiB2YWx1ZSBpcyBhIHB1cmUgbnVtYmVyLCB0aGVuIGFkZCA9IiR2YWx1ZSIgc28gdGhhdCBFeGNl
-bCBzdG9wcyB0aGUgYXV0by1mb3JtYXR0aW5nIChpdCdkIHR1cm4gMTIzNDU2IGludG8gMS4yM2Ur
-NikKCWlmKCAkdmFsdWUgPX4gL15bMC05XC1dKyQvICkKCXsKCQlyZXR1cm4gIj1cIiR2YWx1ZVwi
-IjsKCX0KCgkjIG9ubHkgZXNjYXBlcyByb3cgd2l0aCBzcGFjZXMgYW5kIGNvbW1hcwoJaWYoICR2
-YWx1ZSA9fiAvLHwgLyApCgl7CgkJcmV0dXJuICJcIiR2YWx1ZVwiIjsKCX0KCglyZXR1cm4gJHZh
-bHVlOwp9CgoKMTsK
+bHVlID0gJGZpZWxkLT5nZXRfdmFsdWUoICRlcGRhdGEgKTsKCQkJCWlmKCBkZWZpbmVkICRyZXBv
+LT5jb25maWcoICRzZWxmLT57cmVwb3J0fS0+e2V4cG9ydF9jb25mfSwgImN1c3RvbV9leHBvcnQi
+ICkgJiYKCQkJCQlleGlzdHMgJHJlcG8tPmNvbmZpZyggJHNlbGYtPntyZXBvcnR9LT57ZXhwb3J0
+X2NvbmZ9LCAiY3VzdG9tX2V4cG9ydCIgKS0+eyRmaWVsZC0+Z2V0X25hbWV9ICkKICAgICAgICAJ
+ICAgICAgICAgICAgICAgIHsKCQkJCQkkdmFsdWUgPSAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e3Jl
+cG9ydH0tPntleHBvcnRfY29uZn0sICJjdXN0b21fZXhwb3J0IiApLT57JGZpZWxkLT5nZXRfbmFt
+ZX0tPiggJGVwZGF0YSwgJHNlbGYtPntyZXBvcnR9ICk7CgkJCQl9CgkJCQlpZiggZGVmaW5lZCAk
+ZmllbGQtPnt2aXJ0dWFsfSApCgkJCQl7CgkJCQkJJHZhbHVlID0gRVByaW50czo6VXRpbHM6OnRy
+ZWVfdG9fdXRmOCggJGVwZGF0YS0+cmVuZGVyX3ZhbHVlKCAkZmllbGQtPmdldF9uYW1lICkgKTsK
+CQkJCX0KCQkgICAgICAgICAgICAgICAgbmV4dCBpZiAhRVByaW50czo6VXRpbHM6OmlzX3NldCgg
+JHZhbHVlICk7CiAgICAgICAgCSAgICAgICAgICAgICAgICAkc3ViZGF0YS0+eyRmaWVsZC0+Z2V0
+X25hbWV9ID0gJHZhbHVlOwoJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAk
+c3ViZGF0YS0+e3VyaX0gPSAkZXBkYXRhLT51cmk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRz
+ZWxmLT5fZXBkYXRhX3RvX2pzb24oICRzdWJkYXRhLCAkZGVwdGggKyAxLCAwLCAlb3B0cyApOwog
+ICAgICAgIH0KfQoKCnN1YiBlc2NhcGVfdmFsdWUKewoJbXkoICRwbHVnaW4sICR2YWx1ZSApID0g
+QF87CgoJcmV0dXJuICciIicgdW5sZXNzKCBkZWZpbmVkIEVQcmludHM6OlV0aWxzOjppc19zZXQo
+ICR2YWx1ZSApICk7CgoJIyBzdHJpcHMgYW55IGtpbmQgb2YgZG91YmxlLXF1b3RlczoKCSR2YWx1
+ZSA9fiBzL1x4OTN8XHg5NHwiLycvZzsKCSMgYW5kIGNvbnRyb2wtY2hhcmFjdGVycwoJJHZhbHVl
+ID1+IHMvXG58XHJ8XHQvL2c7CgoJIyBpZiB2YWx1ZSBpcyBhIHB1cmUgbnVtYmVyLCB0aGVuIGFk
+ZCA9IiR2YWx1ZSIgc28gdGhhdCBFeGNlbCBzdG9wcyB0aGUgYXV0by1mb3JtYXR0aW5nIChpdCdk
+IHR1cm4gMTIzNDU2IGludG8gMS4yM2UrNikKCWlmKCAkdmFsdWUgPX4gL15bMC05XC1dKyQvICkK
+CXsKCQlyZXR1cm4gIj1cIiR2YWx1ZVwiIjsKCX0KCgkjIG9ubHkgZXNjYXBlcyByb3cgd2l0aCBz
+cGFjZXMgYW5kIGNvbW1hcwoJaWYoICR2YWx1ZSA9fiAvLHwgLyApCgl7CgkJcmV0dXJuICJcIiR2
+YWx1ZVwiIjsKCX0KCglyZXR1cm4gJHZhbHVlOwp9CgoKMTsK
plugins/EPrints/Plugin/Screen/Report.pm
text/plain
- 210449eac1f7ee02e7519beead2c640b
+ e88058df69ea1db3f145b316f6d1ada2
MD5
- 37100
+ 43956
cGFja2FnZSBFUHJpbnRzOjpQbHVnaW46OlNjcmVlbjo6UmVwb3J0OwoKIyBBYnN0cmFjdCBjbGFz
cyB0aGF0IGhhbmRsZXMgdGhlIFJlcG9ydCB0b29scwoKdXNlIEpTT04gcXcoZW5jb2RlX2pzb24p
Owp1c2UgRVByaW50czo6UGx1Z2luOjpTY3JlZW47CkBJU0EgPSAoICdFUHJpbnRzOjpQbHVnaW46
OlNjcmVlbicgKTsKCnVzZSBzdHJpY3Q7CgpzdWIgbmV3CnsKCW15KCAkY2xhc3MsICVwYXJhbXMg
KSA9IEBfOwoKCW15ICRzZWxmID0gJGNsYXNzLT5TVVBFUjo6bmV3KCVwYXJhbXMpOwoKCXB1c2gg
-QHskc2VsZi0+e2FjdGlvbnN9fSwgcXcoIGV4cG9ydCBzZWFyY2ggKTsKCgkkc2VsZi0+e3Njb25m
-fSA9ICJyZXBvcnQiOwoKICAgICAgICAkc2VsZi0+e2FwcGVhcnN9ID0gWwogICAgICAgICAgICAg
-ICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZSA9PiAia2V5X3Rvb2xzIiwKICAgICAg
-ICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPT4gMTAwMCwKICAgICAgICAgICAgICAgIH0sCiAg
-ICAgICAgXTsKCglyZXR1cm4gJHNlbGY7Cn0KCnN1YiBnZXRfcmVwb3J0IHsgc2hpZnQtPntyZXBv
-cnR9IH0KCnN1YiBjYW5fYmVfdmlld2VkCnsKICAgICAgICBteSggJHNlbGYgKSA9IEBfOwoKCXJl
-dHVybiAxIGlmKCAkc2VsZi0+e3B1YmxpY30gKTsgI2FsbG93IGEgcmVwb3J0IHRvIGJlIHB1Ymxp
-Y2x5IGF2YWlsYWJsZQoKCXJldHVybiAwIGlmKCAhZGVmaW5lZCAkc2VsZi0+e3JlcG9zaXRvcnl9
-LT5jdXJyZW50X3VzZXIgKTsKCQoJcmV0dXJuICRzZWxmLT5hbGxvdyggJ3JlcG9ydCcgKTsKfQoK
-c3ViIGFsbG93X2V4cG9ydCB7IHNoaWZ0LT5jYW5fYmVfdmlld2VkIH0Kc3ViIGFjdGlvbl9leHBv
-cnQge30KCnN1YiB3aXNoZXNfdG9fZXhwb3J0IHsKCSRfWzBdLT5yZXBvc2l0b3J5LT5wYXJhbSgg
-J2V4cG9ydCcgKSB8fAoJJF9bMF0tPnJlcG9zaXRvcnktPnBhcmFtKCAnYWpheCcgKTsKfQoKc3Vi
-IGV4cG9ydF9taW1ldHlwZQp7CglteSggJHNlbGYgKSA9IEBfOwoKCW15ICRwbHVnaW4gPSAkc2Vs
-Zi0+e3Byb2Nlc3Nvcn0tPntwbHVnaW59OwoJaWYoICFkZWZpbmVkICRwbHVnaW4gKQoJewoJCWlm
-KCAkc2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0oICJhamF4IiApICkKCQl7CgkJCXJldHVybiAiYXBw
-bGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCI7CgkJfQoJCgkJcmV0dXJuICJ0ZXh0L2h0bWw7
-IGNoYXJzZXQ9dXRmLTgiOwoJfQoKCXJldHVybiAkcGx1Z2luLT5wYXJhbSggIm1pbWV0eXBlIiAp
-Owp9CgpzdWIgZXhwb3J0CnsKCW15KCAkc2VsZiApID0gQF87CgoJbXkgJHBhcnQgPSAkc2VsZi0+
-cmVwb3NpdG9yeS0+cGFyYW0oICJhamF4IiApOwoJbXkgJGYgPSAiYWpheF8kcGFydCI7CgoJaWYo
-ICRzZWxmLT5jYW4oICRmICkgKQoJewoJCWJpbm1vZGUoU1RET1VULCAiOnV0ZjgiKTsKCQlyZXR1
-cm4gJHNlbGYtPiRmOwoJfQoKCW15ICRwbHVnaW4gPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntwbHVn
-aW59OwoJcmV0dXJuICRzZWxmLT5TVVBFUjo6ZXhwb3J0IGlmICFkZWZpbmVkICRwbHVnaW47CgoJ
-bXkgJGl0ZW1zID0gJHNlbGYtPml0ZW1zOwoJaWYoICRwbHVnaW4tPntncm91cGVkfSAmJiBkZWZp
-bmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwfSApICNzb21lIGV4cG9ydCBwbHVnaW5zIGNh
-biBhY2NlcHQgZ3JvdXBpbmdzCgl7CgkJJGl0ZW1zID0gJHNlbGYtPmdldF9ncm91cGVkX2l0ZW1z
-KCAkaXRlbXMsIDAgKTsKCX0KCgkkcGx1Z2luLT5pbml0aWFsaXNlX2ZoKCBcKlNURE9VVCApOwoJ
-JHBsdWdpbi0+b3V0cHV0X2xpc3QoCgkJbGlzdCA9PiAkaXRlbXMsCgkJZmggPT4gXCpTVERPVVQs
-CgkJZXhwb3J0ZmllbGRzID0+ICRzZWxmLT57cHJvY2Vzc29yfS0+e2V4cG9ydGZpZWxkc30sCgkJ
-ZGF0YXNldCA9PiAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntkYXRhc2V0fSwKCQlwbHVnaW4gPT4gJHNl
-bGYsCgkpOwp9CgpzdWIgYWxsb3dfc2VhcmNoIHsgcmV0dXJuIDE7IH0KCiNnZW5lcmF0ZXMgc2Vh
-cmNoIGNvbmZpZwpzdWIgX2NyZWF0ZV9zZWFyY2gKewoJbXkoICRzZWxmICkgPSBAXzsKCglteSAk
-c2Vzc2lvbiA9ICRzZWxmLT57c2Vzc2lvbn07CiAgICAgICAgbXkgJHJlcG9ydF9wbHVnaW4gPSAk
-c2VsZi0+e3Byb2Nlc3Nvcn0tPnNjcmVlbjsKCgkjIERvIG5vdCBjcmVhdGUgYSBzZWFyY2ggY29u
-ZmlnIGlmIHRoaXMgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIHJlcG9ydAogIAlyZXR1cm4gaWYg
-ISBkZWZpbmVkICRyZXBvcnRfcGx1Z2luLT57c2VhcmNoZGF0YXNldGlkfTsKCSRzZWxmLT57cHJv
-Y2Vzc29yfS0+e3JlcG9ydF9wbHVnaW59ID0gJHJlcG9ydF9wbHVnaW47CgogICAgICAgIG15ICRy
-ZXBvcnRfZHMgPSAkc2Vzc2lvbi0+ZGF0YXNldCggJHJlcG9ydF9wbHVnaW4tPntzZWFyY2hkYXRh
-c2V0aWR9ICk7CiAgICAgICAgaWYoIGRlZmluZWQgJHJlcG9ydF9kcyApCiAgICAgICAgewogICAg
-ICAgICAgICAgICAgJHNlbGYtPntwcm9jZXNzb3J9LT57ZGF0YXNldGlkfSA9ICRyZXBvcnRfZHMt
-PmJhc2VfaWQ7CiAgICAgICAgICAgICAgICBteSAkc2NvbmYgPSAkcmVwb3J0X2RzLT5zZWFyY2hf
-Y29uZmlnKCAkcmVwb3J0X3BsdWdpbi0+e3Njb25mfSApOwoJCiAgICAgICAgICAgICAgICBteSAk
-Zm9ybWF0ID0gInJlcG9ydC8iIC4gJHJlcG9ydF9kcy0+YmFzZV9pZDsKICAgICAgICAgICAgICAg
-ICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0gPSAkc2Vzc2lvbi0+cGx1Z2luKCAiU2VhcmNo
-IiApLT5wbHVnaW5zKAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAga2VlcF9jYWNoZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgIHNlc3Npb24gPT4gJHNlbGYtPntzZXNzaW9ufSwKICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICBkYXRhc2V0ID0+ICRyZXBvcnRfZHMsCiAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgJXskc2NvbmZ9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
-ICAgICAgICAgICAgIHR5cGUgPT4gIlNlYXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNh
-bl9zZWFyY2ggPT4gJGZvcm1hdCwKICAgICAgICAgICAgICAgICk7Cgl9Cn0KCnN1YiBhY3Rpb25f
-c2VhcmNoCnsKCW15KCAkc2VsZiApID0gQF87CgoJJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9u
-fSA9ICJzZWFyY2giOwoKCSNyZWFkIHBhcmFtZXRlcnMKCW15ICRzZXNzaW9uID0gJHNlbGYtPntz
-ZXNzaW9ufTsKCgkkc2VsZi0+e3Byb2Nlc3Nvcn0tPntyZXBvcnR9ID0gJHNlc3Npb24tPnBhcmFt
-KCAncmVwb3J0JyApOwoKCSRzZWxmLT57cHJvY2Vzc29yfS0+e3NjcmVlbmlkfSA9ICRzZWxmLT57
-cHJvY2Vzc29yfS0+e3JlcG9ydH07Cgkkc2VsZi0+X2NyZWF0ZV9zZWFyY2g7CgoJbXkgJGxvYWRl
-ZCA9IDA7CiAgICAgICAgbXkgJGlkID0gJHNlc3Npb24tPnBhcmFtKCAiY2FjaGUiICk7CiAgICAg
-ICAgaWYoIGRlZmluZWQgJGlkICkKICAgICAgICB7CgkJJGxvYWRlZCA9ICRzZWxmLT57cHJvY2Vz
-c29yfS0+e3NlYXJjaH0tPmZyb21fY2FjaGUoICRpZCApOwogICAgICAgIH0KCiAgICAgICAgaWYo
-ICEkbG9hZGVkICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkZXhwID0gJHNlc3Npb24t
-PnBhcmFtKCAiZXhwIiApOwogICAgICAgICAgICAgICAgaWYoIGRlZmluZWQgJGV4cCApCiAgICAg
-ICAgICAgICAgICB7CgkJCSRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPmZyb21fc3RyaW5n
-KCAkZXhwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICMgY2FjaGUgZXhwaXJlZC4uLgogICAg
-ICAgICAgICAgICAgICAgICAgICAkbG9hZGVkID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAg
-ICB9CgogICAgICAgIG15IEBwcm9ibGVtczsKICAgICAgICBpZiggISRsb2FkZWQgKQogICAgICAg
-IHsKCQlmb3IoICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPmZyb21fZm9ybSApCiAgICAg
-ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vs
-Zi0+e3Byb2Nlc3Nvcn0tPmFkZF9tZXNzYWdlKCAid2FybmluZyIsICRfICk7CiAgICAgICAgICAg
-ICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgICAKCgkjZGlzcGxheSB0aGUgcmVzdWx0
-cwoJJHNlbGYtPnJlbmRlcjsKfQoKc3ViIHByb3BlcnRpZXNfZnJvbQp7CglteSggJHNlbGYgKSA9
-IEBfOwoKCW15ICRyZXBvID0gJHNlbGYtPnJlcG9zaXRvcnk7Cgkkc2VsZi0+U1VQRVI6OnByb3Bl
-cnRpZXNfZnJvbTsKCglpZiggZGVmaW5lZCAoIG15ICRkc2lkID0gJHNlbGYtPnBhcmFtKCAiZGF0
-YXNldGlkIiApICkgKQoJewoJCSRzZWxmLT57cHJvY2Vzc29yfS0+e2RhdGFzZXR9ID0gJHNlbGYt
-PnJlcG9zaXRvcnktPmRhdGFzZXQoICRkc2lkICk7Cgl9CgoJIyBzZjIgLSBUT0RPIC0gYmFyayBp
-ZiBkYXRhc2V0IGlzIG5vdCBzZXQ/IHBlcmhhcHMgdGhlcmUgYXJlIG90aGVyIHdheXMgdG8gZ2V0
-IHRoZSBvYmplY3RzIGZyb20uLi4KCW15ICRyZXBvcnQgPSAkc2VsZi0+Z2V0X3JlcG9ydCgpOwoK
-CSNnZXQgYSBzZWFyY2ggb2JqZWN0IGlmIHdlIGhhdmUgb25lIGZyb20gYSBwcmV2aW91cyBzZWFy
-Y2ggYWN0aW9uLCBzbyB0aGF0IHdlIG1pZ2h0IGxhdGVyIHVzZSBpdCB0byBkbyBhbiBleHBvcnQg
-b3Igc2VhcmNoIGFjdGlvbgoJJHNlbGYtPl9jcmVhdGVfc2VhcmNoOwkKCWlmKCBkZWZpbmVkICRz
-ZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggInNlYXJjaCIgKSApCgl7CgkJJHNlbGYtPntwcm9jZXNz
-b3J9LT57c2VhcmNofS0+ZnJvbV9zdHJpbmcoICRzZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggInNl
-YXJjaCIgKSApIGlmIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57c2VhcmNofTsKCQkkc2Vs
-Zi0+e3Byb2Nlc3Nvcn0tPntleHBvcnRfc2VhcmNofSA9IDE7Cgl9CgkKCW15ICRmb3JtYXQgPSAk
-c2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0oICJleHBvcnQiICk7CglpZiggJGZvcm1hdCAmJiAkcmVw
-b3J0ICkKCXsKCQlteSAkcGx1Z2luID0gJHNlbGYtPnJlcG9zaXRvcnktPnBsdWdpbiggIkV4cG9y
-dDo6JGZvcm1hdCIsIHJlcG9ydCA9PiAkcmVwb3J0ICk7CgkJaWYoIGRlZmluZWQgJHBsdWdpbiAm
-JiAoICRwbHVnaW4tPmNhbl9hY2NlcHQoICJyZXBvcnQvJHJlcG9ydCIgKSB8fCAoJHBsdWdpbi0+
-Y2FuX2FjY2VwdCggInJlcG9ydC9nZW5lcmljIiApICkgKSApCgkJewoJCQkkc2VsZi0+e3Byb2Nl
-c3Nvcn0tPntwbHVnaW59ID0gJHBsdWdpbjsKCQl9Cgl9CgoJI2xpc3Qgb2YgZXhwb3J0IGZpZWxk
-cyByZXRyaWV2ZWQgZnJvbSBub24tYWJzdHJhY3QgaW5zdGFuY2VzIG9mIHJlcG9ydHMKCW15IEBl
-eHBvcnRmaWVsZHM7CglpZiggZGVmaW5lZCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9j
-b25mfSwgImV4cG9ydGZpZWxkcyIgKSApCgl7CgkJZm9yZWFjaCBteSAkZmllbGRuYW1lcyAoIHZh
-bHVlcyAleyRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRz
-IiApfSApCgkJewoJCQlmb3JlYWNoCW15ICRmaWVsZG5hbWUgKCBAeyRmaWVsZG5hbWVzfSApCgkJ
-CXsKCQkJCXB1c2ggQGV4cG9ydGZpZWxkcywgJGZpZWxkbmFtZSBpZiBkZWZpbmVkICRzZWxmLT5y
-ZXBvc2l0b3J5LT5wYXJhbSggJGZpZWxkbmFtZSApOyAKCQkJfQoJCX0KCX0KCglteSAkc29ydCA9
-ICRzZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggInNvcnQiICk7CglpZiggZGVmaW5lZCAkc29ydCAp
-Cgl7CgkJJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gPSAkc29ydDsKCX0KCglteSAkZ3JvdXAg
-PSAkc2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0oICJncm91cCIgKTsKCSRzZWxmLT57cHJvY2Vzc29y
-fS0+e2dyb3VwX2V4cH0gPSAkZ3JvdXA7ICNzdG9yZSB0aGUgZ3JvdXAgZXhwcmVzc2lvbiBmb3Ig
-bGF0ZXIgdXNlCgkKCSNkZWNvZGUgdGhlIGdyb3VwIGV4cHJlc3Npb24KCW15ICVncm91cF9vcHRz
-OwoJaWYoIGRlZmluZWQgJGdyb3VwICkKCXsKCQkjZ2V0IGZpZWxkIGFuZCBhc3NvY2lhdGVkIGNv
-bmZpZ3VyYXRpb24gYWJvdXQgdGhlIGdyb3VwLCBlLmcuIHJlcywgdHJ1bmNhdGUsIHJldmVyc2Vf
-b3JkZXIgZXRjLgoJCW15IEBncm91cCA9IHNwbGl0KC87LywgJGdyb3VwICk7CgkJbXkgJGZpcnN0
-ID0gMTsKCQlmb3JlYWNoIG15ICRnIChAZ3JvdXApCgkJewoJCQlpZiggJGZpcnN0ICkKCQkJewoJ
-CQkJJGdyb3VwID0gJGc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlteSBAb3B0cyA9IHNwbGl0KC89
-LywgJGcgKTsKCQkJCSRncm91cF9vcHRzeyRvcHRzWzBdfSA9ICRvcHRzWzFdOwkJCgkJCX0KCQkJ
-JGZpcnN0ID0gMDsKCQl9CgkJJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9ID0gJGdyb3VwOwoJ
-CSRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9ID0gXCVncm91cF9vcHRzOwoJfQoKCSRz
-ZWxmLT57cHJvY2Vzc29yfS0+e2V4cG9ydGZpZWxkc30gPSBcQGV4cG9ydGZpZWxkczsKfQoJCQoj
-IFxAKHttZXRhX2ZpZWxkcz0+WyAiZmllbGQxIiwgImZpZWxkMiIgImRvY3VtZW50LmZpZWxkMyIg
-XSwgbWVyZ2U9PiJBTlkiLCBtYXRjaD0+IkVYIiwgdmFsdWU9PiJiZWVzIn0sIHttZXRhX2ZpZWxk
-cz0+WyAiZmllbGQ0IiBdLCB2YWx1ZT0+ImhvbmV5In0pOwojIGUuZy4KIyByZXR1cm4gWyB7IG1l
-dGFfZmllbGRzID0+IFsgJ3R5cGUnIF0sIHZhbHVlID0+ICdhcnRpY2xlJyB9IF0Kc3ViIGZpbHRl
-cnMKewoJcmV0dXJuIFtdOwp9CgojIGhvdyB0byBzZWxlY3QgaXRlbXMgaS5lLiB0aGUgc2xpY2Ug
-b2YgZGF0YSB3ZSB3YW50IHRvIHZhbGlkYXRlL2V4cG9ydD8KIyAKc3ViIGl0ZW1zCnsKCW15KCAk
-c2VsZiApID0gQF87CglpZiggJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNo
-IiB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntleHBvcnRfc2VhcmNofSApCiAgICAgICAJewoJCW15
-ICRyZXBvcnQgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntyZXBvcnRfcGx1Z2lufTsJCgkJJHJlcG9y
-dC0+YXBwbHlfZmlsdGVycyBpZiAkcmVwb3J0LT5jYW4oICdhcHBseV9maWx0ZXJzJyApOwoKCQlt
-eSAkaXRlbXMgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5wZXJmb3JtX3NlYXJjaDsK
-CgkJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gKQoJCXsJCgkJCSRpdGVt
-cyA9ICRpdGVtcy0+cmVvcmRlciggJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gKTsKCQl9CgkJ
-cmV0dXJuICRpdGVtczsKCX0KCWVsc2lmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2Rh
-dGFzZXR9ICkgCgl7CgkJbXkgJXNlYXJjaF9vcHRzID0gKCBmaWx0ZXJzID0+ICRzZWxmLT5maWx0
-ZXJzLCBzYXRpc2Z5X2FsbCA9PiAxICk7CgkJaWYoIGRlZmluZWQgJHNlbGYtPnBhcmFtKCAnY3Vz
-dG9tX29yZGVyJyApICkKCQl7CgkJCSRzZWFyY2hfb3B0c3tjdXN0b21fb3JkZXJ9ID0gJHNlbGYt
-PnBhcmFtKCAnY3VzdG9tX29yZGVyJyApOwoJCX0KCgkJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9j
-ZXNzb3J9LT57c29ydH0gKSAjYW4gb3JkZXJpbmcgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIHNob3Vs
-ZCB0cnVtcCB0aGUgcmVwb3J0cyBjdXN0b20gb3JkZXIKCQl7CgkJCSRzZWFyY2hfb3B0c3tjdXN0
-b21fb3JkZXJ9ID0gJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH07CgkJfQkKCQlyZXR1cm4gJHNl
-bGYtPntwcm9jZXNzb3J9LT57ZGF0YXNldH0tPnNlYXJjaCggJXNlYXJjaF9vcHRzICk7Cgl9Cgkj
-IHdlIGNhbid0IHJldHVybiBhbiBFUHJpbnRzOjpMaXN0IGlmIHtkYXRhc2V0fSBpcyBub3QgZGVm
-aW5lZAoJcmV0dXJuIHVuZGVmOwp9CgojIGZyb20gUmVwb3J0cy9ST1MvSm91cm5hbHMucG0KIyBU
-T0RPIE5vdGUgcXVpdGUgYSBsb3Qgb2YgcmVwbGljYXRpb24gYmV0d2VlbiB0aGlzIGFuZCBFeHBv
-cnQ6OlJlcG9ydDo6Q1NWOjpvdXRwdXRfZGF0YW9iagpzdWIgdmFsaWRhdGVfZGF0YW9iagp7Cglt
-eSggJHBsdWdpbiwgJGRhdGFvYmogKSA9IEBfOwoKCW15ICRyZXBvID0gJHBsdWdpbi0+cmVwb3Np
-dG9yeTsKCglteSAkcmVwb3J0X2ZpZWxkcyA9ICRwbHVnaW4tPnJlcG9ydF9maWVsZHMoICRkYXRh
-b2JqICk7CglteSAkdmFsX2ZpZWxkcyA9ICRwbHVnaW4tPnZhbGlkYXRlX2ZpZWxkcyggJGRhdGFv
-YmogKTsKCgkjIHJlbGF0ZWQgb2JqZWN0cyBhbmQgdGhlaXIgZGF0YXNldHMKCW15ICRvYmplY3Rz
-ID0gJHBsdWdpbi0+Z2V0X3JlbGF0ZWRfb2JqZWN0cyggJGRhdGFvYmogKTsKCW15ICR2YWxpZF9k
-cyA9IHt9OwoJZm9yZWFjaCBteSAkZHNpZCAoIGtleXMgJSRvYmplY3RzICkKCXsKCQkkdmFsaWRf
-ZHMtPnskZHNpZH0gPSAkcmVwby0+ZGF0YXNldCggJGRzaWQgKTsKCX0KCglteSBAcHJvYmxlbXM7
-CgoJZm9yZWFjaCBteSAkZmllbGQgKCBAeyAkcGx1Z2luLT5yZXBvcnRfZmllbGRzX29yZGVyKCAk
-ZGF0YW9iaiApIHx8IFtdIH0gKQoJewoJCSMgdmFsaWRhdGlvbiBhY3Rpb24KCQlteSAkdl9maWVs
-ZCA9ICR2YWxfZmllbGRzLT57JGZpZWxkfTsKCQluZXh0IHVubGVzcyBkZWZpbmVkICR2X2ZpZWxk
-OyAjIG5vIHZhbGlkYXRpb24gcmVxdWlyZWQKCgkJIyBzaW1wbGUgY2FzZSAtIGNvZGUgaGFuZGxl
-cyB2YWxpZGF0aW9uCgkJaWYoIHJlZiggJHZfZmllbGQgKSBlcSAnQ09ERScgKQoJCXsKCQkJIyBh
-IHN1Ynt9IHdlIG5lZWQgdG8gcnVuCgkJCWV2YWwgewoJCQkJJiR2X2ZpZWxkKCAkcGx1Z2luLCAk
-b2JqZWN0cywgXEBwcm9ibGVtcyApOwoJCQl9OwoJCQlpZiggJEAgKQoJCQl7CgkJCQkkcmVwby0+
-bG9nKCAiVmFsaWRhdGlvbiBSdW50aW1lIGVycm9yOiAkQCIgKTsKCQkJfQoJCQluZXh0OwoJCX0K
-CQllbHNpZiggbGMgJHZfZmllbGQgbmUgInJlcXVpcmVkIiApCgkJewoJCQkkcmVwby0+bG9nKCAi
-VmFsaWRhdGlvbiBSdW50aW1lIGVycm9yOiAkdl9maWVsZCBtdXN0IGJlIGNvZGUgcmVmIG9yICdy
-ZXF1aXJlZCciICk7CgkJCW5leHQ7CgkJfQoKCQkjIGNoZWNrIHJlcXVpcmVkIHZhbHVlcwoKCQlt
-eSAkdmFsdWU7ICMgdGhlIHZhbHVlIHRvIHZhbGlkYXRlCgkJbXkgJGVwX2ZpZWxkID0gJHJlcG9y
-dF9maWVsZHMtPnskZmllbGR9OwoJCWlmKCByZWYoICRlcF9maWVsZCApIGVxICdDT0RFJyApCgkJ
-ewoJCQkjIGEgc3Vie30gd2UgbmVlZCB0byBydW4KCQkJZXZhbCB7CgkJCQkkdmFsdWUgPSAmJGVw
-X2ZpZWxkKCAkcGx1Z2luLCAkb2JqZWN0cyApOwoJCQl9OwoJCQlpZiggJEAgKQoJCQl7CgkJCQkk
-cmVwby0+bG9nKCAiVmFsaWRhdGlvbiBSdW50aW1lIGVycm9yOiAkQCIgKTsKCQkJfQoJCX0KCQll
-bHNpZiggJGVwX2ZpZWxkID1+IC9eKFthLXpfXSspXC4oWzAtOWEtel9dKykkLyApCgkJewoJCQkj
-IGEgc3RyYWlnaHQgbWFwcGluZyB3aXRoIGFuIEVQcmludHMgZmllbGQKCQkJbXkoICRkc19pZCwg
-JGVwX2ZpZWxkbmFtZSApID0gKCAkMSwgJDIgKTsKCQkJbXkgJGRzID0gJHZhbGlkX2RzLT57JGRz
-X2lkfTsKCgkJCWlmKCBkZWZpbmVkICRkcyAmJiAkZHMtPmhhc19maWVsZCggJGVwX2ZpZWxkbmFt
-ZSApICkKCQkJewoJCQkJJHZhbHVlID0gJG9iamVjdHMtPnskZHNfaWR9LT52YWx1ZSggJGVwX2Zp
-ZWxkbmFtZSApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJIyBkYXRhc2V0IG9yIGZpZWxkIGRvZXNu
-J3QgZXhpc3QKCQkJCSRyZXBvLT5sb2coICJWYWxpZGF0aW9uIFJ1bnRpbWUgZXJyb3I6IGRhdGFz
-ZXQgJGRzX2lkIG9yIGZpZWxkICRlcF9maWVsZG5hbWUgZG9lc24ndCBleGlzdCIgKTsKCQkJfQoJ
-CX0KCgkJIyBpcyBmaWVsZCBzZXQ/CgkJaWYoICFFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAkdmFs
-dWUgKSApCgkJewoJCQlwdXNoIEBwcm9ibGVtcywgIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgJGZp
-ZWxkIjsKCQl9Cgl9CgoJcmV0dXJuIEBwcm9ibGVtczsKfQoKIyBUT0RPIE5vdGUgY29weSBvZiBF
-eHBvcnQ6OlJlcG9ydDo6Z2V0X3JlbGF0ZWRfb2JqZWN0cwpzdWIgZ2V0X3JlbGF0ZWRfb2JqZWN0
-cwp7CglteSggJHBsdWdpbiwgJGRhdGFvYmogKSA9IEBfOwoKCW15ICRjbWQgPSBbICdyZXBvcnRz
-JywgJHBsdWdpbi0+Z2V0X3JlcG9ydCwgJ2dldF9yZWxhdGVkX29iamVjdHMnIF07CiAgICAgICAg
-aWYoICRwbHVnaW4tPnJlcG9zaXRvcnktPmNhbl9jYWxsKCBAJGNtZCApICkKICAgICAgICB7CgkJ
-cmV0dXJuICRwbHVnaW4tPnJlcG9zaXRvcnktPmNhbGwoICRjbWQsICRwbHVnaW4tPnJlcG9zaXRv
-cnksICRkYXRhb2JqICkgfHwge307CiAgICAgICAgfQoKCSMganVzdCBwYXNzIHRoZSBkYXRhb2Jq
-IGl0c2VsZgoJcmV0dXJuIHsKCQkkZGF0YW9iai0+ZGF0YXNldC0+Y29uZmlkID0+ICRkYXRhb2Jq
-LAoJfTsKfQoKIyBUT0RPIE5vdGUgY29weSBvZiBFeHBvcnQ6OlJlcG9ydDo6cmVwb3J0X2ZpZWxk
-c19vcmRlcgpzdWIgcmVwb3J0X2ZpZWxkc19vcmRlcgp7CglteSggJHBsdWdpbiApID0gQF87CgoJ
-cmV0dXJuICRwbHVnaW4tPntyZXBvcnRfZmllbGRzX29yZGVyfSBpZiggZGVmaW5lZCAkcGx1Z2lu
-LT57cmVwb3J0X2ZpZWxkc19vcmRlcn0gKTsKCglteSAkcmVwb3J0ID0gJHBsdWdpbi0+Z2V0X3Jl
-cG9ydCgpOwoJcmV0dXJuIFtdIHVubGVzcyggZGVmaW5lZCAkcmVwb3J0ICk7CgoJJHBsdWdpbi0+
-e3JlcG9ydF9maWVsZHNfb3JkZXJ9ID0gJHBsdWdpbi0+cmVwb3NpdG9yeS0+Y29uZmlnKCAncmVw
-b3J0cycsICRyZXBvcnQsICdmaWVsZHMnICk7CgoJcmV0dXJuICRwbHVnaW4tPntyZXBvcnRfZmll
-bGRzX29yZGVyfTsKfQoKIyBUT0RPIE5vdGUgY29weSBvZiBFeHBvcnQ6OlJlcG9ydDo6cmVwb3J0
-X2ZpZWxkcwpzdWIgcmVwb3J0X2ZpZWxkcwp7CglteSggJHBsdWdpbiApID0gQF87CgoJcmV0dXJu
-ICRwbHVnaW4tPntyZXBvcnRfZmllbGRzfSBpZiggZGVmaW5lZCAkcGx1Z2luLT57cmVwb3J0X2Zp
-ZWxkc30gKTsKCglteSAkcmVwb3J0ID0gJHBsdWdpbi0+Z2V0X3JlcG9ydCgpOwoJcmV0dXJuIFtd
-IHVubGVzcyggZGVmaW5lZCAkcmVwb3J0ICk7CgoJJHBsdWdpbi0+e3JlcG9ydF9maWVsZHN9ID0g
-JHBsdWdpbi0+cmVwb3NpdG9yeS0+Y29uZmlnKCAncmVwb3J0cycsICRyZXBvcnQsICdtYXBwaW5n
-cycgKTsKCglyZXR1cm4gJHBsdWdpbi0+e3JlcG9ydF9maWVsZHN9Owp9CgpzdWIgdmFsaWRhdGVf
-ZmllbGRzCnsKCW15KCAkcGx1Z2luICkgPSBAXzsKCglyZXR1cm4gJHBsdWdpbi0+e3ZhbGlkYXRl
-X2ZpZWxkc30gaWYoIGRlZmluZWQgJHBsdWdpbi0+e3ZhbGlkYXRlX2ZpZWxkc30gKTsKCglteSAk
-cmVwb3J0ID0gJHBsdWdpbi0+Z2V0X3JlcG9ydCgpOwoJcmV0dXJuIFtdIHVubGVzcyggZGVmaW5l
-ZCAkcmVwb3J0ICk7CgoJJHBsdWdpbi0+e3ZhbGlkYXRlX2ZpZWxkc30gPSAkcGx1Z2luLT5yZXBv
-c2l0b3J5LT5jb25maWcoICdyZXBvcnRzJywgJHJlcG9ydCwgJ3ZhbGlkYXRlJyApOwoKCXJldHVy
-biAkcGx1Z2luLT57dmFsaWRhdGVfZmllbGRzfTsKfQoKIyMgcmVuZGVyaW5nCgojIFRoZSAic3Bs
-YXNoIHBhZ2UiCnN1YiByZW5kZXJfc3BsYXNoX3BhZ2UKewoJbXkoICRzZWxmICkgPSBAXzsKCglt
-eSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoJbXkgQHBsdWdpbnMgPSAkc2VsZi0+cmVwb3J0
-X3BsdWdpbnM7CgoJaWYoICFzY2FsYXIoIEBwbHVnaW5zICkgKQoJewoJCXJldHVybiAkc2VsZi0+
-aHRtbF9waHJhc2UoICJub19yZXBvcnRzIiApOwoJfQoKCW15IEBsYWJlbHM7CglteSBAcGFuZWxz
-OwoKCSNwcmVzZXQgcmVwb3J0cwoJcHVzaCBAbGFiZWxzLCAkcmVwby0+aHRtbF9waHJhc2UoICJy
-ZXBvcnRzX3ByZXNldCIgKTsKCW15ICRwcmVzZXQgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAiZGl2
-IiApOwoJbXkgJHByZXNldHNfYWRkZWQgPSAwOwoKCSMgdG9wIGNhdGVnb3J5OiBieSBjbGFzc25h
-bWUgPiBSZXBvcnQ6OlJPUzo6U29tZVJlcG9ydDEsIFJlcG9ydDo6Uk9TOjpTb21lUmVwb3J0MgoK
-CW15ICR1bCA9ICRzZWxmLT5yZXBvc2l0b3J5LT5tYWtlX2VsZW1lbnQoICd1bCcsIGNsYXNzID0+
-ICdlcF9yZXBvcnRfY2F0ZWdvcnknICk7CgoJIyBjYXQgfiBjYXRlZ29yeSAtICFtZWVvdwoJbXkg
-JGNhdCA9ICIiOwoJbXkgJGNhdF9saSA9IHVuZGVmOyAKCW15ICRjYXRfdWwgPSB1bmRlZjsKCQoJ
-I3ByZXBhcmUgaGFzaCBvZiByZXBvcnRpbmcgcGx1Z2lucwoJbXkgJXJlcG9ydF9oYXNoOwoJZm9y
-ZWFjaCBteSAkcmVwb3J0X3BsdWdpbiAoIHNvcnQgeyAkYS0+Z2V0X3N1YnR5cGUgY21wICRiLT5n
-ZXRfc3VidHlwZSB9IEBwbHVnaW5zICkKCXsKCQlteSAkcGx1Z2luX2NhdCA9ICRyZXBvcnRfcGx1
-Z2luLT5nZXRfc3VidHlwZTsKCQkkcGx1Z2luX2NhdCA9fiBzL15SZXBvcnQ6OihbXjpdKyk6Pzo/
-KC4qKSQvJDEvZzsJCgoJCWlmKCAkY2F0IG5lICRwbHVnaW5fY2F0ICkgI3dlIGhhdmUgYSB0b3At
-Y2F0ZWdvcnkKCQl7CgkJCSRjYXQgPSAkcGx1Z2luX2NhdDsKCQkJJHJlcG9ydF9oYXNoeyRjYXR9
-ID0gW107CgkJfQoKCQlpZiggRVByaW50czo6VXRpbHM6OmlzX3NldCggJDIgKSApCgkJewoJCQlw
-dXNoIEB7JHJlcG9ydF9oYXNoeyRjYXR9fSwgJHJlcG9ydF9wbHVnaW47CgkJfQoJfQoJCglmb3Ig
-bXkgJHRvcF9jYXQoIHNvcnQga2V5cyAlcmVwb3J0X2hhc2ggKQoJewoJCW15IEByZXBvcnRfcGx1
-Z2lucyA9IEB7JHJlcG9ydF9oYXNoeyR0b3BfY2F0fX07CgkJaWYoIHNjYWxhciggQHJlcG9ydF9w
-bHVnaW5zICkgPiAwICkKCQl7CgkJCSNyZW5kZXIgdG9wLWNhdGVnb3J5CgkJCSRjYXRfbGkgPSAk
-dWwtPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVwb3NpdG9yeS0+bWFrZV9lbGVtZW50KCAnbGknICkg
-KTsKCQkJJGNhdF9saS0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZXBvc2l0b3J5LT5odG1sX3BocmFz
-ZSggIlBsdWdpbi9TY3JlZW4vUmVwb3J0LyR0b3BfY2F0OnRpdGxlIiApICk7CgoJCQkkY2F0X3Vs
-ID0gJGNhdF9saS0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZXBvc2l0b3J5LT5tYWtlX2VsZW1lbnQo
-ICd1bCcsIGNsYXNzID0+ICdlcF9yZXBvcnRfaXRlbXMnICkgKTsKCgkJCWZvcmVhY2ggbXkgJHIg
-KCBAcmVwb3J0X3BsdWdpbnMgKQoJCQl7CgkJCQlteSAkc3ViX2xpID0gJGNhdF91bC0+YXBwZW5k
-Q2hpbGQoICRzZWxmLT5yZXBvc2l0b3J5LT5tYWtlX2VsZW1lbnQoICdsaScgKSApOwoJCQkJJHN1
-Yl9saS0+YXBwZW5kQ2hpbGQoICRyLT5yZW5kZXJfYWN0aW9uX2xpbmsgKTsKCQkJCSRwcmVzZXRz
-X2FkZGVkKys7CgkJCX0KCQl9Cgl9CgoJJHByZXNldC0+YXBwZW5kQ2hpbGQoICR1bCApOwoJcHVz
-aCBAcGFuZWxzLCAkcHJlc2V0OwoKCSNjdXN0b20gcmVwb3J0cwoJcHVzaCBAbGFiZWxzLCAkcmVw
-by0+aHRtbF9waHJhc2UoICJyZXBvcnRzX2N1c3RvbSIgKTsKCglteSAkY3VzdG9tID0gJHJlcG8t
-Pm1ha2VfZWxlbWVudCggImRpdiIsIGlkPT4iY3VzdG9tX3JlcG9ydCIgKTsKCW15ICRmb3JtID0g
-JHJlcG8tPnJlbmRlcl9mb3JtKCAiZ2V0IiApOwoKCSNhZGQgZWFjaCByZXBvcnQgdG8gdGhlIHNl
-bGVjdCBjb21wb25lbnQgYW5kIGdlbmVyYXRlIHNlYXJjaCBmb3JtIGlmIHJlcXVpcmVkCglteSAk
-cmVwb3J0X3NlbGVjdCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJzZWxlY3QiLCBuYW1lPT4icmVw
-b3J0IiwgaWQ9PiJzZWxlY3RfcmVwb3J0IiApOwoJbXkgJXNlYXJjaF9mb3JtczsKCW15ICRjdXN0
-b21fcmVwb3J0cyA9IDA7CgkjZm9yZWFjaCBteSAkcmVwb3J0X3BsdWdpbiAoIEBwbHVnaW5zICkK
-CWZvcmVhY2ggbXkgJHJlcG9ydF9wbHVnaW4gKCBzb3J0IHsgJGEtPmdldF9zdWJ0eXBlIGNtcCAk
-Yi0+Z2V0X3N1YnR5cGUgfSBAcGx1Z2lucyApCgl7CgkJaWYoICRyZXBvcnRfcGx1Z2luLT5wYXJh
-bSggImN1c3RvbSIgKSApCgkJewkKCQkJJGN1c3RvbV9yZXBvcnRzKys7CgkJCW15ICRmb3JtaWQg
-PSAkcmVwb3J0X3BsdWdpbi0+e3Njb25mfTsKCgkJCSNhZGQgdG8gc2VsZWN0IGNvbXBvbmVudAoJ
-CQlteSAkaWQgPSAkcmVwb3J0X3BsdWdpbi0+e3JlcG9ydH07CgkJCW15ICRvcHRpb24gPSAkcmVw
-by0+bWFrZV9lbGVtZW50KCAib3B0aW9uIiwgdmFsdWUgPT4gJHJlcG9ydF9wbHVnaW4tPmdldF9z
-dWJ0eXBlLCBmb3JtID0+ICRmb3JtaWQgKTsKCQkJJG9wdGlvbi0+YXBwZW5kQ2hpbGQoICRyZXBv
-cnRfcGx1Z2luLT5yZW5kZXJfdGl0bGUgKTsKCQkJJHJlcG9ydF9zZWxlY3QtPmFwcGVuZENoaWxk
-KCAkb3B0aW9uICk7CgoJCQkjY3JlYXRlIHNlYXJjaCBmb3JtCgkJCQoJCQkjZ2V0IHJlcG9ydCBk
-YXRhc2V0IGFuZCBhcHByb3ByaWF0ZSBzZWFyY2ggY29uZmlnCgkJCW15ICRyZXBvcnRfZHMgPSAk
-cmVwby0+ZGF0YXNldCggJHJlcG9ydF9wbHVnaW4tPntzZWFyY2hkYXRhc2V0aWR9ICk7CgkJCW15
-ICRzY29uZiA9ICRyZXBvcnRfZHMtPnNlYXJjaF9jb25maWcoICRyZXBvcnRfcGx1Z2luLT57c2Nv
-bmZ9ICkgOwoJCQkjbXkgJHNlYXJjaCA9IEVQcmludHM6OlNlYXJjaC0+bmV3KAoJCSAgICAgICAg
-IyAgICAgICAga2VlcF9jYWNoZSA9PiAxLAoJICAgICAgICAgICAgICAgICMJc2Vzc2lvbiA9PiAk
-cmVwbywKCQkgICAgICAgICMgICAgICAgIGRhdGFzZXQgPT4gJHJlcG9ydF9kcywKCQkgICAgICAg
-ICMgICAgICAgICV7JHNjb25mfQoJCQkjKTsKCgkJCW15ICRmb3JtYXQgPSAicmVwb3J0LyIgLiAk
-cmVwb3J0X2RzLT5iYXNlX2lkOwoJICAgICAgICAgICAgICAgIG15ICRzZWFyY2hleHAgPSAkcmVw
-by0+cGx1Z2luKCAiU2VhcmNoIiApLT5wbHVnaW5zKAogICAgICAgICAgICAgICAgICAgICAgICAJ
-ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlrZWVwX2NhY2hlID0+IDEsCgkgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24gPT4gJHNlbGYtPntzZXNzaW9ufSwK
-ICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9PiAkcmVwb3J0X2RzLAog
-ICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAleyRzY29uZn0KICAgICAgICAgICAgICAg
-ICAgICAgICAgCX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gIlNlYXJjaCIsCiAg
-ICAgICAgICAgICAgICAgICAgICAgIGNhbl9zZWFyY2ggPT4gJGZvcm1hdCwKICAgICAgICAgICAg
-ICAgIAkpOwkKCQkJJHNlYXJjaGV4cC0+ZnJvbV9mb3JtOwoKCQkJI2dlbmVyYXRlIHRoZSBmb3Jt
-CgkJCW15ICRmcmFnID0gJHNlbGYtPnJlbmRlcl9zZWFyY2hfZmllbGRzKCAkc2VhcmNoZXhwICk7
-CgkJCSRzZWFyY2hfZm9ybXN7JGZvcm1pZH0gPSAkZnJhZyB1bmxlc3MgZXhpc3RzICRzZWFyY2hf
-Zm9ybXN7JGZvcm1pZH07CgkJfQkKCX0KCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG9ydF9zZWxl
-Y3QgKTsKCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQoICJz
-Y3JlZW4iLCAkc2VsZi0+e3NjcmVlbmlkfSApICk7CgoJI3JlbmRlciBwb3NzaWJsZSBzZWFyY2gg
-Zm9ybXMKCWZvcmVhY2ggbXkgJGZvcm1pZCAoa2V5cyAlc2VhcmNoX2Zvcm1zKQoJewoJCW15ICR0
-YWJsZSA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJ0YWJsZSIsIGNsYXNzPT4iZXBfc2VhcmNoX2Zp
-ZWxkcyIsIGlkPT4kZm9ybWlkLCBzdHlsZT0+ImRpc3BsYXk6IG5vbmUiICk7CgkgICAgICAgICRm
-b3JtLT5hcHBlbmRDaGlsZCggJHRhYmxlICk7CgkgICAgICAgICR0YWJsZS0+YXBwZW5kQ2hpbGQo
-ICRzZWFyY2hfZm9ybXN7JGZvcm1pZH0gKTsKCX0KCgkkZm9ybS0+YXBwZW5kQ2hpbGQoICRzZWxm
-LT5yZW5kZXJfY29udHJvbHMgKTsKCSRjdXN0b20tPmFwcGVuZENoaWxkKCAkZm9ybSApOwoKCSNq
-YXZhc2NyaXB0IGZvciBjaGFuZ2luZyBmb3JtcyBiYXNlZCBvbiByZXBvcnQgc2VsZWN0aW9uCgkk
-Y3VzdG9tLT5hcHBlbmRDaGlsZCggJHJlcG8tPm1ha2VfamF2YXNjcmlwdCggJ2luaXRSZXBvcnRG
-b3JtKCk7JyApICk7CgoJaWYoICRjdXN0b21fcmVwb3J0cyAmJiAkcHJlc2V0c19hZGRlZCA+IDAg
-KSAjc2V0IHVwIHRhYiBpbnRlcmZhY2UKCXsKCQlteSBAbGFiZWxzOwoJICAgICAgICBteSBAcGFu
-ZWxzOwoKCQlwdXNoIEBsYWJlbHMsICRyZXBvLT5odG1sX3BocmFzZSggInJlcG9ydHNfcHJlc2V0
-IiApOwoJCXB1c2ggQGxhYmVscywgJHJlcG8tPmh0bWxfcGhyYXNlKCAicmVwb3J0c19jdXN0b20i
-ICk7CgoJCXB1c2ggQHBhbmVscywgJHByZXNldDsKCQlwdXNoIEBwYW5lbHMsICRjdXN0b207CgoJ
-CXJldHVybiAkcmVwby0+eGh0bWwtPnRhYnMoXEBsYWJlbHMsIFxAcGFuZWxzICk7Cgl9CgllbHNp
-ZiggJHByZXNldHNfYWRkZWQgPiAwICkKCXsJCgkJcmV0dXJuICRwcmVzZXQ7Cgl9CgllbHNlCgl7
-CgkJcmV0dXJuICRjdXN0b207Cgl9Cn0KCnN1YiByZW5kZXJfc2VhcmNoX2ZpZWxkcwp7CiAgICAg
-ICAgbXkoICRzZWxmLCAkc2VhcmNoICkgPSBAXzsKCiAgICAgICAgbXkgJGZyYWcgPSAkc2VsZi0+
-e3Nlc3Npb259LT5tYWtlX2RvY19mcmFnbWVudDsKICAgICAgICBmb3JlYWNoIG15ICRzZiAoICRz
-ZWFyY2gtPmdldF9ub25fZmlsdGVyX3NlYXJjaGZpZWxkcyApCiAgICAgICAgewoJICAgICAgICAg
-JGZyYWctPmFwcGVuZENoaWxkKAogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e3Nlc3Np
-b259LT5yZW5kZXJfcm93X3dpdGhfaGVscCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICBoZWxwX3ByZWZpeCA9PiAkc2YtPmdldF9mb3JtX3ByZWZpeC4iX2hlbHAiLAogICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPT4gJHNmLT5yZW5kZXJfaGVscCwKICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9PiAkc2YtPnJlbmRlcl9uYW1lLAogICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0+ICRzZi0+cmVuZGVyLAogICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgIG5vX3RvZ2dsZSA9PiAoICRzZi0+e3Nob3dfaGVscH0gZXEg
-ImFsd2F5cyIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19oZWxwID0+ICgg
-JHNmLT57c2hvd19oZWxwfSBlcSAibmV2ZXIiICksCiAgICAgICAgCSkgKTsKICAgICAgICB9Cgog
-ICAgICAgIHJldHVybiAkZnJhZzsKfQoKc3ViIHJlbmRlcl9jb250cm9scwp7CglteSggJHNlbGYg
-KSA9IEBfOwoKCW15ICRkaXYgPSAkc2VsZi0+e3Nlc3Npb259LT5tYWtlX2VsZW1lbnQoCiAgICAg
-ICAgICAgICAgICAiZGl2IiAsCiAgICAgICAgICAgICAgICBjbGFzcyA9PiAiZXBfc2VhcmNoX2J1
-dHRvbnMiICk7CiAgICAgICAgJGRpdi0+YXBwZW5kQ2hpbGQoICRzZWxmLT57c2Vzc2lvbn0tPnJl
-bmRlcl9hY3Rpb25fYnV0dG9ucygKICAgICAgICAgICAgICAgIF9vcmRlciA9PiBbICJzZWFyY2gi
-LCAibmV3c2VhcmNoIiBdLAogICAgICAgICAgICAgICAgbmV3c2VhcmNoID0+ICRzZWxmLT57c2Vz
-c2lvbn0tPnBocmFzZSggImxpYi9zZWFyY2hleHByZXNzaW9uOmFjdGlvbl9yZXNldCIgKSwKICAg
-ICAgICAgICAgICAgIHNlYXJjaCA9PiAkc2VsZi0+e3Nlc3Npb259LT5waHJhc2UoICJsaWIvc2Vh
-cmNoZXhwcmVzc2lvbjphY3Rpb25fc2VhcmNoIiApICkKICAgICAgICApOwoKCXJldHVybiAkZGl2
-Owp9CgpzdWIgcmVuZGVyCnsKCW15KCAkc2VsZiApID0gQF87CgoJIyBpZiB1c2VycyBhY2Nlc3Mg
-U2NyZWVuOjpSZXBvcnQgZGlyZWN0bHkgd2Ugd2FudCB0byBkaXNwbGF5IHNvbWUgc29ydCBvZiBt
-ZW51CgkjIHdoZXJlIHVzZXJzIGNhbiBzZWxlY3Qgdmlld2FibGUgcmVwb3J0cwoJaWYoICJFUHJp
-bnRzOjpQbHVnaW46OiIuJHNlbGYtPmdldF9pZCBlcSBfX1BBQ0tBR0VfXyAmJiAkc2VsZi0+e3By
-b2Nlc3Nvcn0tPnthY3Rpb259IG5lICJzZWFyY2giICkKCXsJCgkJcmV0dXJuICRzZWxmLT5yZW5k
-ZXJfc3BsYXNoX3BhZ2U7Cgl9CgoJbXkgJHJlcG8gPSAkc2VsZi0+cmVwb3NpdG9yeTsKCglteSAk
-Y2h1bmsgPSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7CgoJJGNodW5rLT5hcHBlbmRDaGlsZCgg
-JHNlbGYtPnJlbmRlcl9leHBvcnRfYmFyICk7CgkkY2h1bmstPmFwcGVuZENoaWxkKCAkc2VsZi0+
-cmVuZGVyX2dyb3VwX29wdGlvbnMgKTsKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZW5k
-ZXJfc29ydF9vcHRpb25zICk7CgoJbXkgJGl0ZW1zID0gJHNlbGYtPml0ZW1zOwoJaWYoICFkZWZp
-bmVkICRpdGVtcyB8fCAkaXRlbXMtPmNvdW50ID09IDAgKQoJewoJCSMgTm8gaXRlbXMgbWVzc2Fn
-ZQoJfQoKCW15ICRqc29uOwoKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3Vw
-fSAmJiAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gbmUgIiIgKQoJewoJCW15ICRncm91cGVk
-ID0gJHNlbGYtPmdldF9ncm91cGVkX2l0ZW1zKCAkaXRlbXMsIDEgKTsKCQkkanNvbiA9IGVuY29k
-ZV9qc29uICRncm91cGVkOwoJfQoJZWxzZQoJewoJCW15ICRpdGVtX2lkcyA9IGRlZmluZWQgJGl0
-ZW1zID8gJGl0ZW1zLT5pZHMgOiBbXTsKCQkkanNvbiA9ICJbIi5qb2luKCcsJyxAJGl0ZW1faWRz
-KS4iXSI7Cgl9CgogICAgICAgIG15ICR1cmwgPSAkcmVwby0+Y3VycmVudF91cmwoIGhvc3QgPT4g
-MSApOwogICAgICAgIG15ICRwYXJhbWV0ZXJzID0gVVJJLT5uZXc7CiAgICAgICAgJHBhcmFtZXRl
-cnMtPnF1ZXJ5X2Zvcm0oCiAgICAgICAgICAgICAgICAkc2VsZi0+aGlkZGVuX2JpdHMsCiAgICAg
-ICAgKTsKICAgICAgICAkcGFyYW1ldGVycyA9ICRwYXJhbWV0ZXJzLT5xdWVyeTsKCQkKCW15ICRk
-cyA9ICRyZXBvLT5kYXRhc2V0KCAkc2VsZi0+cGFyYW0oICdkYXRhc2V0aWQnICkgKSBpZiBkZWZp
-bmVkICRzZWxmLT5wYXJhbSggJ2RhdGFzZXRpZCcgKTsKCW15ICRwcmVmaXggPSAkZHMtPmJhc2Vf
-aWQgaWYgZGVmaW5lZCAkZHM7CgoJIyB0aGUgbWFpbiA8ZGl2PgoJbXkgJGNvbnRhaW5lcl9pZCA9
-IHNwcmludGYoICJlcF9yZXBvcnRfJXNcX2NvbnRhaW5lciIsICRzZWxmLT5nZXRfcmVwb3J0ICk7
-CgoJI3VwZGF0ZSBqYXZhc2NyaXB0IHBhcmFtZXRlcnMgaWYgY29taW5nIGZyb20gYSBzZWFyY2gg
-cmVxdWVzdAoJaWYoICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJ
-ewoJCW15ICRwbHVnaW4gPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntyZXBvcnR9OwoJCSRwbHVnaW4g
-PX4gcy86LyUzQS9nOwoJCSRwYXJhbWV0ZXJzID0gInNjcmVlbj0kcGx1Z2luIjsKCQkkcHJlZml4
-ID0gJHNlbGYtPntwcm9jZXNzb3J9LT57ZGF0YXNldGlkfTsKCQkkY29udGFpbmVyX2lkID0gc3By
-aW50ZiggImVwX3JlcG9ydF8lc1xfY29udGFpbmVyIiwgJHNlbGYtPntwcm9jZXNzb3J9LT57cmVw
-b3J0X3BsdWdpbn0tPntyZXBvcnR9ICk7Cgl9CgkKCSNzaG93L2hpZGUgY29tcGxpYW5jZQoJbXkg
-JHNob3dfY29tcGxpYW5jZSA9IDE7Cgkkc2hvd19jb21wbGlhbmNlID0gJHNlbGYtPntzaG93X2Nv
-bXBsaWFuY2V9IGlmIGRlZmluZWQgJHNlbGYtPntzaG93X2NvbXBsaWFuY2V9OwoKCSNjdXN0b20g
-bGFiZWxzCglteSAkbGFiZWxzID0gMDsKCSRsYWJlbHMgPSBlbmNvZGVfanNvbiAkc2VsZi0+e2xh
-YmVsc30gaWYgZGVmaW5lZCAkc2VsZi0+e2xhYmVsc307CgoJJGNodW5rLT5hcHBlbmRDaGlsZCgg
-JHJlcG8tPm1ha2VfamF2YXNjcmlwdCggPDwiRU9KIiApICk7CmRvY3VtZW50Lm9ic2VydmUoImRv
-bTpsb2FkZWQiLCBmdW5jdGlvbigpIHsKCW5ldyBFUHJpbnRzX1NjcmVlbl9SZXBvcnRfTG9hZGVy
-KCB7CgkJaWRzOiAkanNvbiwKCQlzdGVwOiAyMCwKCQlwcmVmaXg6ICckcHJlZml4JywKCQl1cmw6
-ICckdXJsJywKCQlwYXJhbWV0ZXJzOiAnJHBhcmFtZXRlcnMnLAkJCgkJY29udGFpbmVyX2lkOiAn
-JGNvbnRhaW5lcl9pZCcsCgkJc2hvd19jb21wbGlhbmNlOiAkc2hvd19jb21wbGlhbmNlLAoJCWxh
-YmVsczogJGxhYmVscwoJfSApLmV4ZWN1dGUoKTsKCn0pOwpFT0oKCSRjaHVuay0+YXBwZW5kQ2hp
-bGQoICRyZXBvLT5tYWtlX2VsZW1lbnQoICdkaXYnLCBjbGFzcyA9PiAnZXBfcmVwb3J0X3BhZ2Un
-LCBpZCA9PiAkY29udGFpbmVyX2lkICkgKTsKCglyZXR1cm4gJGNodW5rOwp9CgoKc3ViIHJlbmRl
-cl9leHBvcnRfYmFyCnsKCW15KCAkc2VsZiApID0gQF87CgoJbXkgJHJlcG8gPSAkc2VsZi0+cmVw
-b3NpdG9yeTsKCglteSAkY2h1bmsgPSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7CgoJbXkgQHBs
-dWdpbnMgPSAkc2VsZi0+ZXhwb3J0X3BsdWdpbnM7CglyZXR1cm4gJGNodW5rIHVubGVzcyggc2Nh
-bGFyKCBAcGx1Z2lucyApIHx8IGRlZmluZWQoICRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0
-X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiApICkgKTsKCglteSAkcmVwb3J0X2RzID0gJHJlcG8tPmRh
-dGFzZXQoICRzZWxmLT57ZGF0YXNldGlkfSApOwoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVyX2Zv
-cm07CgkkZm9ybS0+c2V0QXR0cmlidXRlKCBtZXRob2QgPT4gImdldCIgKTsKCglpZiggZGVmaW5l
-ZCAkc2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0oICJzZWFyY2giICkgfHwgJHNlbGYtPntwcm9jZXNz
-b3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVw
-by0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNlYXJjaCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntz
-ZWFyY2h9LT5zZXJpYWxpc2UpICk7Cgl9CgkJCglpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nv
-cn0tPntzb3J0fSApCgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRl
-bl9maWVsZCggInNvcnQiLCAgJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gKSApOwoJfQkKCglp
-ZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9leHB9ICkKCXsKCQkkZm9ybS0+
-YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAiZ3JvdXAiLCAgJHNlbGYt
-Pntwcm9jZXNzb3J9LT57Z3JvdXBfZXhwfSApICk7Cgl9CQoKCWlmKCAhZGVmaW5lZCggJHJlcG8t
-PmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZHMiICkgKSApCgl7CgkJ
-I25vIGN1c3RvbSBleHBvcnQgZmllbGRzIGRlZmluZWQsIHVzZSBleHBvcnQgcGx1Z2lucyBkZXNp
-Z25lZCBmb3IgdGhpcyByZXBvcnQKCQlteSAkc2VsZWN0ID0gJGZvcm0tPmFwcGVuZENoaWxkKCAk
-cmVwby0+cmVuZGVyX29wdGlvbl9saXN0KAoJCQluYW1lID0+ICdleHBvcnQnLAoJCQl2YWx1ZXMg
-PT4gW21hcCB7ICRfLT5nZXRfc3VidHlwZSB9IEBwbHVnaW5zXSwKCQkJbGFiZWxzID0+IHttYXAg
-eyAkXy0+Z2V0X3N1YnR5cGUgPT4gJF8tPmdldF9uYW1lIH0gQHBsdWdpbnN9LAoJCSkgKTsKCX0K
-CWVsc2UKCXsKCQkjcHJvdmlkZSBsaXN0IG9mIGRlZmF1bHQgZXhwb3J0IHBsdWdpbnMgZm9yIHJl
-cG9ydHMKCQlAcGx1Z2lucyA9ICRzZWxmLT5leHBvcnRfcGx1Z2lucyggImdlbmVyaWMiICk7CgkJ
-bXkgJHNlbGVjdCA9ICRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9vcHRpb25fbGlz
-dCgKCQkJbmFtZSA9PiAnZXhwb3J0JywKCQkJdmFsdWVzID0+IFttYXAgeyAkXy0+Z2V0X3N1YnR5
-cGUgfSBAcGx1Z2luc10sCgkJCWxhYmVscyA9PiB7bWFwIHsgJF8tPmdldF9zdWJ0eXBlID0+ICRf
-LT5nZXRfbmFtZSB9IEBwbHVnaW5zfSwKCQkpICk7CgoKCQkjY3JlYXRlIGxhYmVscyBhbmQgcGFu
-ZWxzIGZvciB0YWJiZWQgaW50ZXJmYWNlZAoJCW15ICR4bWwgPSAkcmVwby0+eG1sOwoJCW15ICR4
-aHRtbCA9ICRyZXBvLT54aHRtbDsKCgkJI2FsbG93IHVzZXIgdG8gY2hvb3NlIHdoaWNoIGZpZWxk
-cyB0aGV5IHdhbnQgdG8gZXhwb3J0CgkJbXkgJGV4cG9ydF9vcHRpb25zID0gJHJlcG8tPm1ha2Vf
-ZWxlbWVudCggImRpdiIgKTsKCgkJZm9yZWFjaCBteSAka2V5ICgga2V5cyAleyRyZXBvLT5jb25m
-aWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiApfSApCgkJewoJCQkjY3Jl
-YXRlIGEgbmV3IGxpc3QJCQkKCQkJbXkgJHVsID0gJHJlcG8tPm1ha2VfZWxlbWVudCggInVsIiwK
-CSAgICAgICAgICAgICAgICAJc3R5bGUgPT4gImxpc3Qtc3R5bGUtdHlwZTogbm9uZSIKCSAgICAg
-ICAgCSk7CgkJCQoJCQlteSAkY291bnQgPSAwOyAjY291bnQgaG93IG1hbnkgZmllbGRzIHdlIGFk
-ZAoJCQlmb3JlYWNoIG15ICRmaWVsZG5hbWUoIEB7JHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBv
-cnRfY29uZn0sICJleHBvcnRmaWVsZHMiICktPnska2V5fX0gKQoJCQl7CgkJCQlpZiggZGVmaW5l
-ZCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImN1c3RvbV9leHBvcnQiICkg
-JiYgZXhpc3RzICR7JHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJjdXN0b21f
-ZXhwb3J0IiApfXskZmllbGRuYW1lfSApICN3ZSBoYXZlIGEgY3VzdG9tIGV4cG9ydCBmdW5jdGlv
-biBpbnN0ZWFkIAoJCQkJewoJCQkJCSRjb3VudCsrOwoJCQkJCSRzZWxmLT5fZXhwb3J0X2ZpZWxk
-X2NoZWNrYm94KCAkcmVwbywgJGZpZWxkbmFtZSwgJHVsLCAkcmVwby0+aHRtbF9waHJhc2UoICJl
-eHBvcnRmaWVsZG9wdGlvbnM6JGZpZWxkbmFtZSIgKSApOyAKCQkJCX0KCQkJCWVsc2lmKCBkZWZp
-bmVkIEVQcmludHM6OlV0aWxzOjpmaWVsZF9mcm9tX2NvbmZpZ19zdHJpbmcoICRyZXBvcnRfZHMs
-ICRmaWVsZG5hbWUgKSApCgkJCQl7CgkJCQkJbXkgJGZpZWxkID0gRVByaW50czo6VXRpbHM6OmZp
-ZWxkX2Zyb21fY29uZmlnX3N0cmluZyggJHJlcG9ydF9kcywgJGZpZWxkbmFtZSApOwoJCQkJCSRj
-b3VudCsrOwogICAgICAgCQkJICAgICAgICAJJHNlbGYtPl9leHBvcnRfZmllbGRfY2hlY2tib3go
-ICRyZXBvLCAkZmllbGRuYW1lLCAkdWwsICRmaWVsZC0+cmVuZGVyX25hbWUgKTsKCgkJCQl9CgkJ
-CX0KCQkJaWYoICRjb3VudCApICNvbmx5IGFkZCBvcHRpb25zIGlmIHdlIGhhdmUgYW55IGZpZWxk
-cyB0byBzaG93CgkJCXsKCQkJCW15ICRkaXYgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAiZGl2Iiwg
-Y2xhc3M9PiJyZXBvcnRfZXhwb3J0X29wdGlvbnMiICk7CgkJCQkkZGl2LT5hcHBlbmRDaGlsZCgg
-bXkgJGggPSAkcmVwby0+bWFrZV9lbGVtZW50KCAiaDQiICkgKTsKCQkJCSRoLT5hcHBlbmRDaGls
-ZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAiZXhwb3J0ZmllbGRzOiRrZXkiICkgKTsJCgkJCQkkZGl2
-LT5hcHBlbmRDaGlsZCggJHVsICk7CgkJCQkkZXhwb3J0X29wdGlvbnMtPmFwcGVuZENoaWxkKCAk
-ZGl2ICk7CgkJCX0KICAgICAgIAkJfQoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJGV4cG9ydF9vcHRp
-b25zICk7Cgl9CgoJJGZvcm0tPmFwcGVuZENoaWxkKCAKCQkkcmVwby0+cmVuZGVyX2J1dHRvbigK
-CQkJbmFtZSA9PiAiX2FjdGlvbl9leHBvcnQiLAoJCQljbGFzcyA9PiAiZXBfZm9ybV9hY3Rpb25f
-YnV0dG9uIiwKCQkJdmFsdWUgPT4gJHJlcG8tPnBocmFzZSggJ2NnaS91c2Vycy9lZGl0X2Vwcmlu
-dDpleHBvcnQnICkKCSkgKTsKCgkjY3JlYXRlIGEgY29sbGFwc2libGUgYm94CglteSAkaW1hZ2Vz
-dXJsID0gJHJlcG8tPmN1cnJlbnRfdXJsKCBwYXRoID0+ICJzdGF0aWMiLCAic3R5bGUvaW1hZ2Vz
-IiApOwoJbXkgJW9wdGlvbnM7Cgkkb3B0aW9uc3tzZXNzaW9ufSA9ICRyZXBvOwogICAgICAgICRv
-cHRpb25ze2lkfSA9ICJlcF9yZXBvcnRfZXhwb3J0IjsKICAgICAgICAkb3B0aW9uc3t0aXRsZX0g
-PSAkcmVwby0+aHRtbF9waHJhc2UoICJleHBvcnRfdGl0bGUiICk7CiAgICAgICAgJG9wdGlvbnN7
-Y29sbGFwc2VkfSA9IDE7Cgkkb3B0aW9uc3tjb250ZW50fSA9ICRmb3JtOwogICAgICAgICRvcHRp
-b25ze3Nob3dfaWNvbl91cmx9ID0gIiRpbWFnZXN1cmwvbXVsdGlfZG93bi5wbmciOwoJJG9wdGlv
-bnN7aGlkZV9pY29uX3VybH0gPSAiJGltYWdlc3VybC9tdWx0aV91cC5wbmciOwoKCW15ICRib3gg
-PSAkcmVwby0+bWFrZV9lbGVtZW50KCAiZGl2Iiwgc3R5bGU9PiJ0ZXh0LWFsaWduOiBsZWZ0IiAp
-OwoJJGJveC0+YXBwZW5kQ2hpbGQoIEVQcmludHM6OkJveDo6cmVuZGVyKCAlb3B0aW9ucyApICk7
-CgkkY2h1bmstPmFwcGVuZENoaWxkKCAkYm94ICk7CgoJcmV0dXJuICRjaHVuazsKfQoKc3ViIHJl
-bmRlcl9zb3J0X29wdGlvbnMKewoJbXkoICRzZWxmICkgPSBAXzsKCglteSAkcmVwbyA9ICRzZWxm
-LT5yZXBvc2l0b3J5OwoKCW15ICRjaHVuayA9ICRyZXBvLT5tYWtlX2RvY19mcmFnbWVudDsKCgly
-ZXR1cm4gJGNodW5rIHVubGVzcyggZGVmaW5lZCggJHJlcG8tPmNvbmZpZyggJHNlbGYtPntzb3J0
-X2NvbmZ9LCAic29ydGZpZWxkcyIgKSApICk7CgoJbXkgJHNvcnRfY29uZiA9ICRyZXBvLT5jb25m
-aWcoICRzZWxmLT57c29ydF9jb25mfSwgInNvcnRmaWVsZHMiICk7CgoJI2J1aWxkIHRoZSBmb3Jt
-CglteSAkZm9ybSA9ICRzZWxmLT5yZW5kZXJfZm9ybTsKCSRmb3JtLT5zZXRBdHRyaWJ1dGUoIG5h
-bWUgPT4gInNvcnRfcmVwb3J0IiApOwogICAgICAgICRmb3JtLT5zZXRBdHRyaWJ1dGUoIG1ldGhv
-ZCA9PiAiZ2V0IiApOwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJGZvcm0gKTsKCQoJaWYoIGRlZmlu
-ZWQgJHJlcG8tPnBhcmFtKCAic2VhcmNoIiApIHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlv
-bn0gZXEgInNlYXJjaCIgKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9o
-aWRkZW5fZmllbGQoICJzZWFyY2giLCAgJHNlbGYtPntwcm9jZXNzb3J9LT57c2VhcmNofS0+c2Vy
-aWFsaXNlKSApOwoJfQoKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX2V4
-cH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQo
-ICJncm91cCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9leHB9ICkgKTsKCX0KCgkjZGlz
-cGxheSB0aGUgbGlua3MgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGZvcm0KCW15ICRmaXJzdCA9IDE7
-CglteSAkc29ydF9saW5rcyA9ICRyZXBvLT5tYWtlX2RvY19mcmFnbWVudDsKCWZvcmVhY2ggbXkg
-JHNvcnRfbmFtZSAoIGtleXMgJXskc29ydF9jb25mfSApCiAgICAgICAgewoJCW15ICRzb3J0X3Zh
-bHVlID0gJHNvcnRfY29uZi0+eyRzb3J0X25hbWV9OwoJCWlmKCAkZmlyc3QgKQoJCXsKCQkJJGZv
-cm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNvcnQiLCAkc29y
-dF92YWx1ZSkgKTsKCQl9CgoJCWlmKCAhJGZpcnN0ICkKICAgICAgICAgICAgICAgIHsKICAgICAg
-ICAgICAgICAgIAkkc29ydF9saW5rcy0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSgg
+QHskc2VsZi0+e2FjdGlvbnN9fSwgcXcoIGV4cG9ydCBzZWFyY2ggbmV3c2VhcmNoIHVwZGF0ZSAp
+OwoKCSRzZWxmLT57c2NvbmZ9ID0gInJlcG9ydCI7CgogICAgICAgICRzZWxmLT57YXBwZWFyc30g
+PSBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlID0+ICJr
+ZXlfdG9vbHMiLAogICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9PiAxMDAwLAogICAg
+ICAgICAgICAgICAgfSwKICAgICAgICBdOwoKCXJldHVybiAkc2VsZjsKfQoKc3ViIGdldF9yZXBv
+cnQgeyBzaGlmdC0+e3JlcG9ydH0gfQoKc3ViIGNhbl9iZV92aWV3ZWQKewogICAgICAgIG15KCAk
+c2VsZiApID0gQF87CgoJcmV0dXJuIDEgaWYoICRzZWxmLT57cHVibGljfSApOyAjYWxsb3cgYSBy
+ZXBvcnQgdG8gYmUgcHVibGljbHkgYXZhaWxhYmxlCgoJcmV0dXJuIDAgaWYoICFkZWZpbmVkICRz
+ZWxmLT57cmVwb3NpdG9yeX0tPmN1cnJlbnRfdXNlciApOwoJCglyZXR1cm4gJHNlbGYtPmFsbG93
+KCAncmVwb3J0JyApOwp9CgpzdWIgYWxsb3dfZXhwb3J0IHsgc2hpZnQtPmNhbl9iZV92aWV3ZWQg
+fQpzdWIgYWN0aW9uX2V4cG9ydCB7fQoKc3ViIHdpc2hlc190b19leHBvcnQgewoJJF9bMF0tPnJl
+cG9zaXRvcnktPnBhcmFtKCAnZXhwb3J0JyApIHx8CgkkX1swXS0+cmVwb3NpdG9yeS0+cGFyYW0o
+ICdhamF4JyApOwp9CgpzdWIgZXhwb3J0X21pbWV0eXBlCnsKCW15KCAkc2VsZiApID0gQF87CgoJ
+bXkgJHBsdWdpbiA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e3BsdWdpbn07CglpZiggIWRlZmluZWQg
+JHBsdWdpbiApCgl7CgkJaWYoICRzZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggImFqYXgiICkgKQoJ
+CXsKCQkJcmV0dXJuICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IjsKCQl9CgkKCQly
+ZXR1cm4gInRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI7Cgl9CgoJcmV0dXJuICRwbHVnaW4tPnBh
+cmFtKCAibWltZXR5cGUiICk7Cn0KCnN1YiBleHBvcnQKewoJbXkoICRzZWxmICkgPSBAXzsKCglt
+eSAkcGFydCA9ICRzZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggImFqYXgiICk7CglteSAkZiA9ICJh
+amF4XyRwYXJ0IjsKCglpZiggJHNlbGYtPmNhbiggJGYgKSApCgl7CgkJYmlubW9kZShTVERPVVQs
+ICI6dXRmOCIpOwoJCXJldHVybiAkc2VsZi0+JGY7Cgl9CgoJbXkgJHBsdWdpbiA9ICRzZWxmLT57
+cHJvY2Vzc29yfS0+e3BsdWdpbn07CglyZXR1cm4gJHNlbGYtPlNVUEVSOjpleHBvcnQgaWYgIWRl
+ZmluZWQgJHBsdWdpbjsKCglteSAkaXRlbXMgPSAkc2VsZi0+aXRlbXM7CglpZiggJHBsdWdpbi0+
+e2dyb3VwZWR9ICYmIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9ICkgI3NvbWUg
+ZXhwb3J0IHBsdWdpbnMgY2FuIGFjY2VwdCBncm91cGluZ3MKCXsKCQkkaXRlbXMgPSAkc2VsZi0+
+Z2V0X2dyb3VwZWRfaXRlbXMoICRpdGVtcywgMCApOwoJfQoKCSRwbHVnaW4tPmluaXRpYWxpc2Vf
+ZmgoIFwqU1RET1VUICk7CgkkcGx1Z2luLT5vdXRwdXRfbGlzdCgKCQlsaXN0ID0+ICRpdGVtcywK
+CQlmaCA9PiBcKlNURE9VVCwKCQlleHBvcnRmaWVsZHMgPT4gJHNlbGYtPntwcm9jZXNzb3J9LT57
+ZXhwb3J0ZmllbGRzfSwKCQlkYXRhc2V0ID0+ICRzZWxmLT57cHJvY2Vzc29yfS0+e2RhdGFzZXR9
+LAoJCXBsdWdpbiA9PiAkc2VsZiwKCSk7Cn0KCnN1YiBhbGxvd19zZWFyY2ggeyByZXR1cm4gMTsg
+fQoKI2dlbmVyYXRlcyBzZWFyY2ggY29uZmlnCnN1YiBfY3JlYXRlX3NlYXJjaAp7CglteSggJHNl
+bGYgKSA9IEBfOwoKCW15ICRzZXNzaW9uID0gJHNlbGYtPntzZXNzaW9ufTsKICAgICAgICBteSAk
+cmVwb3J0X3BsdWdpbiA9ICRzZWxmLT57cHJvY2Vzc29yfS0+c2NyZWVuOwoKCSMgRG8gbm90IGNy
+ZWF0ZSBhIHNlYXJjaCBjb25maWcgaWYgdGhpcyBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgcmVw
+b3J0CiAgCXJldHVybiBpZiAhIGRlZmluZWQgJHJlcG9ydF9wbHVnaW4tPntzZWFyY2hkYXRhc2V0
+aWR9OwoJJHNlbGYtPntwcm9jZXNzb3J9LT57cmVwb3J0X3BsdWdpbn0gPSAkcmVwb3J0X3BsdWdp
+bjsKCiAgICAgICAgbXkgJHJlcG9ydF9kcyA9ICRzZXNzaW9uLT5kYXRhc2V0KCAkcmVwb3J0X3Bs
+dWdpbi0+e3NlYXJjaGRhdGFzZXRpZH0gKTsKICAgICAgICBpZiggZGVmaW5lZCAkcmVwb3J0X2Rz
+ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntkYXRhc2V0
+aWR9ID0gJHJlcG9ydF9kcy0+YmFzZV9pZDsKICAgICAgICAgICAgICAgIG15ICRzY29uZiA9ICRy
+ZXBvcnRfZHMtPnNlYXJjaF9jb25maWcoICRyZXBvcnRfcGx1Z2luLT57c2NvbmZ9ICk7CgkKICAg
+ICAgICAgICAgICAgIG15ICRmb3JtYXQgPSAicmVwb3J0LyIgLiAkcmVwb3J0X2RzLT5iYXNlX2lk
+OwogICAgICAgICAgICAgICAgJHNlbGYtPntwcm9jZXNzb3J9LT57c2VhcmNofSA9ICRzZXNzaW9u
+LT5wbHVnaW4oICJTZWFyY2giICktPnBsdWdpbnMoCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwX2NhY2hlID0+IDEsCiAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiA9PiAkc2VsZi0+e3Nlc3Npb259LAogICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgPT4gJHJlcG9ydF9kcywKICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAleyRzY29uZn0KICAgICAgICAgICAgICAgICAgICAg
+ICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PiAiU2VhcmNoIiwKICAgICAgICAg
+ICAgICAgICAgICAgICAgY2FuX3NlYXJjaCA9PiAkZm9ybWF0LAogICAgICAgICAgICAgICAgKTsK
+CX0KfQoKc3ViIGFsbG93X25ld3NlYXJjaCB7IHJldHVybiAxOyB9CgpzdWIgYWxsb3dfdXBkYXRl
+IHsgcmV0dXJuIDE7IH0KCnN1YiBhY3Rpb25fbmV3c2VhcmNoCnsKICAgICAgICBteSggJHNlbGYg
+KSA9IEBfOwoKICAgICAgICBteSAkc2Vzc2lvbiA9ICRzZWxmLT57c2Vzc2lvbn07CgogICAgICAg
+ICMkc2VsZi0+e3Byb2Nlc3Nvcn0tPntyZXBvcnR9ID0gJHNlc3Npb24tPnBhcmFtKCAncmVwb3J0
+JyApOwogICAgICAgICMkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzY3JlZW5pZH0gPSAkc2VsZi0+e3By
+b2Nlc3Nvcn0tPntyZXBvcnR9OwogICAgICAgICMkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259
+ID0gIm5ld3NlYXJjaCI7CiAgICAgICAgIyRzZWxmLT5fY3JlYXRlX3NlYXJjaDsKfQoKc3ViIGFj
+dGlvbl91cGRhdGUKewogICAgICAgIG15KCAkc2VsZiApID0gQF87CgogICAgICAgIG15ICRzZXNz
+aW9uID0gJHNlbGYtPntzZXNzaW9ufTsKCiAgICAgICAgIyRzZWxmLT57cHJvY2Vzc29yfS0+e3Jl
+cG9ydH0gPSAkc2Vzc2lvbi0+cGFyYW0oICdyZXBvcnQnICk7CiAgICAgICAgIyRzZWxmLT57cHJv
+Y2Vzc29yfS0+e3NjcmVlbmlkfSA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e3JlcG9ydH07CiAgICAg
+ICAgIyRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gPSAibmV3c2VhcmNoIjsKICAgICAgICAj
+JHNlbGYtPl9jcmVhdGVfc2VhcmNoOwp9CgpzdWIgYWN0aW9uX3NlYXJjaAp7CglteSggJHNlbGYg
+KSA9IEBfOwoKCSRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gPSAic2VhcmNoIjsKCgkjcmVh
+ZCBwYXJhbWV0ZXJzCglteSAkc2Vzc2lvbiA9ICRzZWxmLT57c2Vzc2lvbn07CgoJJHNlbGYtPntw
+cm9jZXNzb3J9LT57cmVwb3J0fSA9ICRzZXNzaW9uLT5wYXJhbSggJ3JlcG9ydCcgKTsKCgkkc2Vs
+Zi0+e3Byb2Nlc3Nvcn0tPntzY3JlZW5pZH0gPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntyZXBvcnR9
+OwoJJHNlbGYtPl9jcmVhdGVfc2VhcmNoOwoKCW15ICRsb2FkZWQgPSAwOwogICAgICAgIG15ICRp
+ZCA9ICRzZXNzaW9uLT5wYXJhbSggImNhY2hlIiApOwogICAgICAgIGlmKCBkZWZpbmVkICRpZCAp
+CiAgICAgICAgewoJCSRsb2FkZWQgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5mcm9t
+X2NhY2hlKCAkaWQgKTsKICAgICAgICB9CgogICAgICAgIGlmKCAhJGxvYWRlZCApCiAgICAgICAg
+ewogICAgICAgICAgICAgICAgbXkgJGV4cCA9ICRzZXNzaW9uLT5wYXJhbSggImV4cCIgKTsKICAg
+ICAgICAgICAgICAgIGlmKCBkZWZpbmVkICRleHAgKQogICAgICAgICAgICAgICAgewoJCQkkc2Vs
+Zi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5mcm9tX3N0cmluZyggJGV4cCApOwogICAgICAgICAg
+ICAgICAgICAgICAgICAjIGNhY2hlIGV4cGlyZWQuLi4KICAgICAgICAgICAgICAgICAgICAgICAg
+JGxvYWRlZCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSBAcHJv
+YmxlbXM7CiAgICAgICAgaWYoICEkbG9hZGVkICkKICAgICAgICB7CgkJZm9yKCAkc2VsZi0+e3By
+b2Nlc3Nvcn0tPntzZWFyY2h9LT5mcm9tX2Zvcm0gKQogICAgICAgICAgICAgICAgICAgICAgICB7
+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPntwcm9jZXNzb3J9LT5hZGRf
+bWVzc2FnZSggIndhcm5pbmciLCAkXyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
+ICAgfQogICAgICAgICAgCgoJI2Rpc3BsYXkgdGhlIHJlc3VsdHMKCSRzZWxmLT5yZW5kZXI7Cn0K
+CnN1YiBwcm9wZXJ0aWVzX2Zyb20KewoJbXkoICRzZWxmICkgPSBAXzsKCglteSAkcmVwbyA9ICRz
+ZWxmLT5yZXBvc2l0b3J5OwoJJHNlbGYtPlNVUEVSOjpwcm9wZXJ0aWVzX2Zyb207CgoJaWYoIGRl
+ZmluZWQgKCBteSAkZHNpZCA9ICRzZWxmLT5wYXJhbSggImRhdGFzZXRpZCIgKSApICkKCXsKCQkk
+c2VsZi0+e3Byb2Nlc3Nvcn0tPntkYXRhc2V0fSA9ICRzZWxmLT5yZXBvc2l0b3J5LT5kYXRhc2V0
+KCAkZHNpZCApOwoJfQoKCSMgc2YyIC0gVE9ETyAtIGJhcmsgaWYgZGF0YXNldCBpcyBub3Qgc2V0
+PyBwZXJoYXBzIHRoZXJlIGFyZSBvdGhlciB3YXlzIHRvIGdldCB0aGUgb2JqZWN0cyBmcm9tLi4u
+CglteSAkcmVwb3J0ID0gJHNlbGYtPmdldF9yZXBvcnQoKTsKCgkjZ2V0IGEgc2VhcmNoIG9iamVj
+dCBpZiB3ZSBoYXZlIG9uZSBmcm9tIGEgcHJldmlvdXMgc2VhcmNoIGFjdGlvbiwgc28gdGhhdCB3
+ZSBtaWdodCBsYXRlciB1c2UgaXQgdG8gZG8gYW4gZXhwb3J0IG9yIHNlYXJjaCBhY3Rpb24KCSRz
+ZWxmLT5fY3JlYXRlX3NlYXJjaDsJCglpZiggZGVmaW5lZCAkc2VsZi0+cmVwb3NpdG9yeS0+cGFy
+YW0oICJzZWFyY2giICkgKQoJewoJCSRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPmZyb21f
+c3RyaW5nKCAkc2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0oICJzZWFyY2giICkgKSBpZiBkZWZpbmVk
+ICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH07CgkJJHNlbGYtPntwcm9jZXNzb3J9LT57ZXhw
+b3J0X3NlYXJjaH0gPSAxOwoJfQoJCglteSAkZm9ybWF0ID0gJHNlbGYtPnJlcG9zaXRvcnktPnBh
+cmFtKCAiZXhwb3J0IiApOwoJaWYoICRmb3JtYXQgJiYgJHJlcG9ydCApCgl7CgkJbXkgJHBsdWdp
+biA9ICRzZWxmLT5yZXBvc2l0b3J5LT5wbHVnaW4oICJFeHBvcnQ6OiRmb3JtYXQiLCByZXBvcnQg
+PT4gJHJlcG9ydCApOwoJCWlmKCBkZWZpbmVkICRwbHVnaW4gJiYgKCAkcGx1Z2luLT5jYW5fYWNj
+ZXB0KCAicmVwb3J0LyRyZXBvcnQiICkgfHwgKCRwbHVnaW4tPmNhbl9hY2NlcHQoICJyZXBvcnQv
+Z2VuZXJpYyIgKSApICkgKQoJCXsKCQkJJHNlbGYtPntwcm9jZXNzb3J9LT57cGx1Z2lufSA9ICRw
+bHVnaW47CgkJfQoJfQoKCSNsaXN0IG9mIGV4cG9ydCBmaWVsZHMgcmV0cmlldmVkIGZyb20gbm9u
+LWFic3RyYWN0IGluc3RhbmNlcyBvZiByZXBvcnRzCglteSBAZXhwb3J0ZmllbGRzOwoJaWYoIGRl
+ZmluZWQgJHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZHMi
+ICkgKQoJewoJCW15IEBrZXlzOwoJCWlmKCBkZWZpbmVkICRyZXBvLT5jb25maWcoICRzZWxmLT57
+ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRfb3JkZXIiICkgKQoJCXsKCQkJQGtleXMgPSBAeyRy
+ZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRfb3JkZXIiICl9
+OwoJCX0KCQllbHNlCgkJewoJCQlAa2V5cyA9IGtleXMgJXskcmVwby0+Y29uZmlnKCAkc2VsZi0+
+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkcyIgKX07IAoJCX0KCQlmb3JlYWNoIG15ICRrZXkg
+KCBAa2V5cyApCgkJewoJCQlmb3JlYWNoIG15ICRmaWVsZG5hbWUgKCBAeyRyZXBvLT5jb25maWco
+ICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiApLT57JGtleX19ICkKCQkJewoJ
+CQkJcHVzaCBAZXhwb3J0ZmllbGRzLCAkZmllbGRuYW1lIGlmIGRlZmluZWQgJHNlbGYtPnJlcG9z
+aXRvcnktPnBhcmFtKCAkZmllbGRuYW1lICk7IAoJCQl9CgkJfQoJfQoKCW15ICRzb3J0ID0gJHNl
+bGYtPnJlcG9zaXRvcnktPnBhcmFtKCAic29ydCIgKTsKCWlmKCBkZWZpbmVkICRzb3J0ICkKCXsK
+CQkkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSA9ICRzb3J0OwoJfQoKCW15ICRncm91cCA9ICRz
+ZWxmLT5yZXBvc2l0b3J5LT5wYXJhbSggImdyb3VwIiApOwoJJHNlbGYtPntwcm9jZXNzb3J9LT57
+Z3JvdXBfZXhwfSA9ICRncm91cDsgI3N0b3JlIHRoZSBncm91cCBleHByZXNzaW9uIGZvciBsYXRl
+ciB1c2UKCQoJI2RlY29kZSB0aGUgZ3JvdXAgZXhwcmVzc2lvbgoJbXkgJWdyb3VwX29wdHM7Cglp
+ZiggZGVmaW5lZCAkZ3JvdXAgKQoJewoJCSNnZXQgZmllbGQgYW5kIGFzc29jaWF0ZWQgY29uZmln
+dXJhdGlvbiBhYm91dCB0aGUgZ3JvdXAsIGUuZy4gcmVzLCB0cnVuY2F0ZSwgcmV2ZXJzZV9vcmRl
+ciBldGMuCgkJbXkgQGdyb3VwID0gc3BsaXQoLzsvLCAkZ3JvdXAgKTsKCQlteSAkZmlyc3QgPSAx
+OwoJCWZvcmVhY2ggbXkgJGcgKEBncm91cCkKCQl7CgkJCWlmKCAkZmlyc3QgKQoJCQl7CgkJCQkk
+Z3JvdXAgPSAkZzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW15IEBvcHRzID0gc3BsaXQoLz0vLCAk
+ZyApOwoJCQkJJGdyb3VwX29wdHN7JG9wdHNbMF19ID0gJG9wdHNbMV07CQkKCQkJfQoJCQkkZmly
+c3QgPSAwOwoJCX0KCQkkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gPSAkZ3JvdXA7CgkJJHNl
+bGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30gPSBcJWdyb3VwX29wdHM7Cgl9CgoJJHNlbGYt
+Pntwcm9jZXNzb3J9LT57ZXhwb3J0ZmllbGRzfSA9IFxAZXhwb3J0ZmllbGRzOwp9CgkJCiMgXEAo
+e21ldGFfZmllbGRzPT5bICJmaWVsZDEiLCAiZmllbGQyIiAiZG9jdW1lbnQuZmllbGQzIiBdLCBt
+ZXJnZT0+IkFOWSIsIG1hdGNoPT4iRVgiLCB2YWx1ZT0+ImJlZXMifSwge21ldGFfZmllbGRzPT5b
+ICJmaWVsZDQiIF0sIHZhbHVlPT4iaG9uZXkifSk7CiMgZS5nLgojIHJldHVybiBbIHsgbWV0YV9m
+aWVsZHMgPT4gWyAndHlwZScgXSwgdmFsdWUgPT4gJ2FydGljbGUnIH0gXQpzdWIgZmlsdGVycwp7
+CglyZXR1cm4gW107Cn0KCiMgaG93IHRvIHNlbGVjdCBpdGVtcyBpLmUuIHRoZSBzbGljZSBvZiBk
+YXRhIHdlIHdhbnQgdG8gdmFsaWRhdGUvZXhwb3J0PwojIApzdWIgaXRlbXMKewoJbXkoICRzZWxm
+ICkgPSBAXzsKCWlmKCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVxICJzZWFyY2giIHx8
+ICRzZWxmLT57cHJvY2Vzc29yfS0+e2V4cG9ydF9zZWFyY2h9ICkKICAgICAgIAl7CgkJbXkgJHJl
+cG9ydCA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e3JlcG9ydF9wbHVnaW59OwkKCQkkcmVwb3J0LT5h
+cHBseV9maWx0ZXJzIGlmICRyZXBvcnQtPmNhbiggJ2FwcGx5X2ZpbHRlcnMnICk7CgoJCW15ICRp
+dGVtcyA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPnBlcmZvcm1fc2VhcmNoOwoKCQlp
+ZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApCgkJewkKCQkJJGl0ZW1zID0g
+JGl0ZW1zLT5yZW9yZGVyKCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApOwoJCX0KCQlyZXR1
+cm4gJGl0ZW1zOwoJfQoJZWxzaWYoIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57ZGF0YXNl
+dH0gKSAKCXsKCQlteSAlc2VhcmNoX29wdHMgPSAoIGZpbHRlcnMgPT4gJHNlbGYtPmZpbHRlcnMs
+IHNhdGlzZnlfYWxsID0+IDEgKTsKCQlpZiggZGVmaW5lZCAkc2VsZi0+cGFyYW0oICdjdXN0b21f
+b3JkZXInICkgKQoJCXsKCQkJJHNlYXJjaF9vcHRze2N1c3RvbV9vcmRlcn0gPSAkc2VsZi0+cGFy
+YW0oICdjdXN0b21fb3JkZXInICk7CgkJfQoKCQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nv
+cn0tPntzb3J0fSApICNhbiBvcmRlcmluZyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgc2hvdWxkIHRy
+dW1wIHRoZSByZXBvcnRzIGN1c3RvbSBvcmRlcgoJCXsKCQkJJHNlYXJjaF9vcHRze2N1c3RvbV9v
+cmRlcn0gPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fTsKCQl9CQoJCXJldHVybiAkc2VsZi0+
+e3Byb2Nlc3Nvcn0tPntkYXRhc2V0fS0+c2VhcmNoKCAlc2VhcmNoX29wdHMgKTsKCX0KCSMgd2Ug
+Y2FuJ3QgcmV0dXJuIGFuIEVQcmludHM6Okxpc3QgaWYge2RhdGFzZXR9IGlzIG5vdCBkZWZpbmVk
+CglyZXR1cm4gdW5kZWY7Cn0KCiMgZnJvbSBSZXBvcnRzL1JPUy9Kb3VybmFscy5wbQojIFRPRE8g
+Tm90ZSBxdWl0ZSBhIGxvdCBvZiByZXBsaWNhdGlvbiBiZXR3ZWVuIHRoaXMgYW5kIEV4cG9ydDo6
+UmVwb3J0OjpDU1Y6Om91dHB1dF9kYXRhb2JqCnN1YiB2YWxpZGF0ZV9kYXRhb2JqCnsKCW15KCAk
+cGx1Z2luLCAkZGF0YW9iaiApID0gQF87CgoJbXkgJHJlcG8gPSAkcGx1Z2luLT5yZXBvc2l0b3J5
+OwoKCW15ICRyZXBvcnRfZmllbGRzID0gJHBsdWdpbi0+cmVwb3J0X2ZpZWxkcyggJGRhdGFvYmog
+KTsKCW15ICR2YWxfZmllbGRzID0gJHBsdWdpbi0+dmFsaWRhdGVfZmllbGRzKCAkZGF0YW9iaiAp
+OwoKCSMgcmVsYXRlZCBvYmplY3RzIGFuZCB0aGVpciBkYXRhc2V0cwoJbXkgJG9iamVjdHMgPSAk
+cGx1Z2luLT5nZXRfcmVsYXRlZF9vYmplY3RzKCAkZGF0YW9iaiApOwoJbXkgJHZhbGlkX2RzID0g
+e307Cglmb3JlYWNoIG15ICRkc2lkICgga2V5cyAlJG9iamVjdHMgKQoJewoJCSR2YWxpZF9kcy0+
+eyRkc2lkfSA9ICRyZXBvLT5kYXRhc2V0KCAkZHNpZCApOwoJfQoKCW15IEBwcm9ibGVtczsKCglm
+b3JlYWNoIG15ICRmaWVsZCAoIEB7ICRwbHVnaW4tPnJlcG9ydF9maWVsZHNfb3JkZXIoICRkYXRh
+b2JqICkgfHwgW10gfSApCgl7CgkJIyB2YWxpZGF0aW9uIGFjdGlvbgoJCW15ICR2X2ZpZWxkID0g
+JHZhbF9maWVsZHMtPnskZmllbGR9OwoJCW5leHQgdW5sZXNzIGRlZmluZWQgJHZfZmllbGQ7ICMg
+bm8gdmFsaWRhdGlvbiByZXF1aXJlZAoKCQkjIHNpbXBsZSBjYXNlIC0gY29kZSBoYW5kbGVzIHZh
+bGlkYXRpb24KCQlpZiggcmVmKCAkdl9maWVsZCApIGVxICdDT0RFJyApCgkJewoJCQkjIGEgc3Vi
+e30gd2UgbmVlZCB0byBydW4KCQkJZXZhbCB7CgkJCQkmJHZfZmllbGQoICRwbHVnaW4sICRvYmpl
+Y3RzLCBcQHByb2JsZW1zICk7CgkJCX07CgkJCWlmKCAkQCApCgkJCXsKCQkJCSRyZXBvLT5sb2co
+ICJWYWxpZGF0aW9uIFJ1bnRpbWUgZXJyb3I6ICRAIiApOwoJCQl9CgkJCW5leHQ7CgkJfQoJCWVs
+c2lmKCBsYyAkdl9maWVsZCBuZSAicmVxdWlyZWQiICkKCQl7CgkJCSRyZXBvLT5sb2coICJWYWxp
+ZGF0aW9uIFJ1bnRpbWUgZXJyb3I6ICR2X2ZpZWxkIG11c3QgYmUgY29kZSByZWYgb3IgJ3JlcXVp
+cmVkJyIgKTsKCQkJbmV4dDsKCQl9CgoJCSMgY2hlY2sgcmVxdWlyZWQgdmFsdWVzCgoJCW15ICR2
+YWx1ZTsgIyB0aGUgdmFsdWUgdG8gdmFsaWRhdGUKCQlteSAkZXBfZmllbGQgPSAkcmVwb3J0X2Zp
+ZWxkcy0+eyRmaWVsZH07CgkJaWYoIHJlZiggJGVwX2ZpZWxkICkgZXEgJ0NPREUnICkKCQl7CgkJ
+CSMgYSBzdWJ7fSB3ZSBuZWVkIHRvIHJ1bgoJCQlldmFsIHsKCQkJCSR2YWx1ZSA9ICYkZXBfZmll
+bGQoICRwbHVnaW4sICRvYmplY3RzICk7CgkJCX07CgkJCWlmKCAkQCApCgkJCXsKCQkJCSRyZXBv
+LT5sb2coICJWYWxpZGF0aW9uIFJ1bnRpbWUgZXJyb3I6ICRAIiApOwoJCQl9CgkJfQoJCWVsc2lm
+KCAkZXBfZmllbGQgPX4gL14oW2Etel9dKylcLihbMC05YS16X10rKSQvICkKCQl7CgkJCSMgYSBz
+dHJhaWdodCBtYXBwaW5nIHdpdGggYW4gRVByaW50cyBmaWVsZAoJCQlteSggJGRzX2lkLCAkZXBf
+ZmllbGRuYW1lICkgPSAoICQxLCAkMiApOwoJCQlteSAkZHMgPSAkdmFsaWRfZHMtPnskZHNfaWR9
+OwoKCQkJaWYoIGRlZmluZWQgJGRzICYmICRkcy0+aGFzX2ZpZWxkKCAkZXBfZmllbGRuYW1lICkg
+KQoJCQl7CgkJCQkkdmFsdWUgPSAkb2JqZWN0cy0+eyRkc19pZH0tPnZhbHVlKCAkZXBfZmllbGRu
+YW1lICk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkjIGRhdGFzZXQgb3IgZmllbGQgZG9lc24ndCBl
+eGlzdAoJCQkJJHJlcG8tPmxvZyggIlZhbGlkYXRpb24gUnVudGltZSBlcnJvcjogZGF0YXNldCAk
+ZHNfaWQgb3IgZmllbGQgJGVwX2ZpZWxkbmFtZSBkb2Vzbid0IGV4aXN0IiApOwoJCQl9CgkJfQoK
+CQkjIGlzIGZpZWxkIHNldD8KCQlpZiggIUVQcmludHM6OlV0aWxzOjppc19zZXQoICR2YWx1ZSAp
+ICkKCQl7CgkJCXB1c2ggQHByb2JsZW1zLCAiTWlzc2luZyByZXF1aXJlZCBmaWVsZCAkZmllbGQi
+OwoJCX0KCX0KCglyZXR1cm4gQHByb2JsZW1zOwp9CgojIFRPRE8gTm90ZSBjb3B5IG9mIEV4cG9y
+dDo6UmVwb3J0OjpnZXRfcmVsYXRlZF9vYmplY3RzCnN1YiBnZXRfcmVsYXRlZF9vYmplY3RzCnsK
+CW15KCAkcGx1Z2luLCAkZGF0YW9iaiApID0gQF87CgoJbXkgJGNtZCA9IFsgJ3JlcG9ydHMnLCAk
+cGx1Z2luLT5nZXRfcmVwb3J0LCAnZ2V0X3JlbGF0ZWRfb2JqZWN0cycgXTsKICAgICAgICBpZigg
+JHBsdWdpbi0+cmVwb3NpdG9yeS0+Y2FuX2NhbGwoIEAkY21kICkgKQogICAgICAgIHsKCQlyZXR1
+cm4gJHBsdWdpbi0+cmVwb3NpdG9yeS0+Y2FsbCggJGNtZCwgJHBsdWdpbi0+cmVwb3NpdG9yeSwg
+JGRhdGFvYmogKSB8fCB7fTsKICAgICAgICB9CgoJIyBqdXN0IHBhc3MgdGhlIGRhdGFvYmogaXRz
+ZWxmCglyZXR1cm4gewoJCSRkYXRhb2JqLT5kYXRhc2V0LT5jb25maWQgPT4gJGRhdGFvYmosCgl9
+Owp9CgojIFRPRE8gTm90ZSBjb3B5IG9mIEV4cG9ydDo6UmVwb3J0OjpyZXBvcnRfZmllbGRzX29y
+ZGVyCnN1YiByZXBvcnRfZmllbGRzX29yZGVyCnsKCW15KCAkcGx1Z2luICkgPSBAXzsKCglyZXR1
+cm4gJHBsdWdpbi0+e3JlcG9ydF9maWVsZHNfb3JkZXJ9IGlmKCBkZWZpbmVkICRwbHVnaW4tPnty
+ZXBvcnRfZmllbGRzX29yZGVyfSApOwoKCW15ICRyZXBvcnQgPSAkcGx1Z2luLT5nZXRfcmVwb3J0
+KCk7CglyZXR1cm4gW10gdW5sZXNzKCBkZWZpbmVkICRyZXBvcnQgKTsKCgkkcGx1Z2luLT57cmVw
+b3J0X2ZpZWxkc19vcmRlcn0gPSAkcGx1Z2luLT5yZXBvc2l0b3J5LT5jb25maWcoICdyZXBvcnRz
+JywgJHJlcG9ydCwgJ2ZpZWxkcycgKTsKCglyZXR1cm4gJHBsdWdpbi0+e3JlcG9ydF9maWVsZHNf
+b3JkZXJ9Owp9CgojIFRPRE8gTm90ZSBjb3B5IG9mIEV4cG9ydDo6UmVwb3J0OjpyZXBvcnRfZmll
+bGRzCnN1YiByZXBvcnRfZmllbGRzCnsKCW15KCAkcGx1Z2luICkgPSBAXzsKCglyZXR1cm4gJHBs
+dWdpbi0+e3JlcG9ydF9maWVsZHN9IGlmKCBkZWZpbmVkICRwbHVnaW4tPntyZXBvcnRfZmllbGRz
+fSApOwoKCW15ICRyZXBvcnQgPSAkcGx1Z2luLT5nZXRfcmVwb3J0KCk7CglyZXR1cm4gW10gdW5s
+ZXNzKCBkZWZpbmVkICRyZXBvcnQgKTsKCgkkcGx1Z2luLT57cmVwb3J0X2ZpZWxkc30gPSAkcGx1
+Z2luLT5yZXBvc2l0b3J5LT5jb25maWcoICdyZXBvcnRzJywgJHJlcG9ydCwgJ21hcHBpbmdzJyAp
+OwoKCXJldHVybiAkcGx1Z2luLT57cmVwb3J0X2ZpZWxkc307Cn0KCnN1YiB2YWxpZGF0ZV9maWVs
+ZHMKewoJbXkoICRwbHVnaW4gKSA9IEBfOwoKCXJldHVybiAkcGx1Z2luLT57dmFsaWRhdGVfZmll
+bGRzfSBpZiggZGVmaW5lZCAkcGx1Z2luLT57dmFsaWRhdGVfZmllbGRzfSApOwoKCW15ICRyZXBv
+cnQgPSAkcGx1Z2luLT5nZXRfcmVwb3J0KCk7CglyZXR1cm4gW10gdW5sZXNzKCBkZWZpbmVkICRy
+ZXBvcnQgKTsKCgkkcGx1Z2luLT57dmFsaWRhdGVfZmllbGRzfSA9ICRwbHVnaW4tPnJlcG9zaXRv
+cnktPmNvbmZpZyggJ3JlcG9ydHMnLCAkcmVwb3J0LCAndmFsaWRhdGUnICk7CgoJcmV0dXJuICRw
+bHVnaW4tPnt2YWxpZGF0ZV9maWVsZHN9Owp9CgojIyByZW5kZXJpbmcKCiMgVGhlICJzcGxhc2gg
+cGFnZSIKc3ViIHJlbmRlcl9zcGxhc2hfcGFnZQp7CglteSggJHNlbGYgKSA9IEBfOwoKCW15ICRy
+ZXBvID0gJHNlbGYtPnJlcG9zaXRvcnk7CglteSBAcGx1Z2lucyA9ICRzZWxmLT5yZXBvcnRfcGx1
+Z2luczsKCglpZiggIXNjYWxhciggQHBsdWdpbnMgKSApCgl7CgkJcmV0dXJuICRzZWxmLT5odG1s
+X3BocmFzZSggIm5vX3JlcG9ydHMiICk7Cgl9CgoJbXkgQGxhYmVsczsKCW15IEBwYW5lbHM7CgoJ
+I3ByZXNldCByZXBvcnRzCglwdXNoIEBsYWJlbHMsICRyZXBvLT5odG1sX3BocmFzZSggInJlcG9y
+dHNfcHJlc2V0IiApOwoJbXkgJHByZXNldCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJkaXYiICk7
+CglteSAkcHJlc2V0c19hZGRlZCA9IDA7CgoJIyB0b3AgY2F0ZWdvcnk6IGJ5IGNsYXNzbmFtZSA+
+IFJlcG9ydDo6Uk9TOjpTb21lUmVwb3J0MSwgUmVwb3J0OjpST1M6OlNvbWVSZXBvcnQyCgoJbXkg
+JHVsID0gJHNlbGYtPnJlcG9zaXRvcnktPm1ha2VfZWxlbWVudCggJ3VsJywgY2xhc3MgPT4gJ2Vw
+X3JlcG9ydF9jYXRlZ29yeScgKTsKCgkjIGNhdCB+IGNhdGVnb3J5IC0gIW1lZW93CglteSAkY2F0
+ID0gIiI7CglteSAkY2F0X2xpID0gdW5kZWY7IAoJbXkgJGNhdF91bCA9IHVuZGVmOwoJCgkjcHJl
+cGFyZSBoYXNoIG9mIHJlcG9ydGluZyBwbHVnaW5zCglteSAlcmVwb3J0X2hhc2g7Cglmb3JlYWNo
+IG15ICRyZXBvcnRfcGx1Z2luICggc29ydCB7ICRhLT5nZXRfc3VidHlwZSBjbXAgJGItPmdldF9z
+dWJ0eXBlIH0gQHBsdWdpbnMgKQoJewoJCW15ICRwbHVnaW5fY2F0ID0gJHJlcG9ydF9wbHVnaW4t
+PmdldF9zdWJ0eXBlOwoJCSRwbHVnaW5fY2F0ID1+IHMvXlJlcG9ydDo6KFteOl0rKTo/Oj8oLiop
+JC8kMS9nOwkKCgkJaWYoICRjYXQgbmUgJHBsdWdpbl9jYXQgKSAjd2UgaGF2ZSBhIHRvcC1jYXRl
+Z29yeQoJCXsKCQkJJGNhdCA9ICRwbHVnaW5fY2F0OwoJCQkkcmVwb3J0X2hhc2h7JGNhdH0gPSBb
+XTsKCQl9CgoJCWlmKCBFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAkMiApICkKCQl7CgkJCXB1c2gg
+QHskcmVwb3J0X2hhc2h7JGNhdH19LCAkcmVwb3J0X3BsdWdpbjsKCQl9Cgl9CgkKCWZvciBteSAk
+dG9wX2NhdCggc29ydCBrZXlzICVyZXBvcnRfaGFzaCApCgl7CgkJbXkgQHJlcG9ydF9wbHVnaW5z
+ID0gQHskcmVwb3J0X2hhc2h7JHRvcF9jYXR9fTsKCQlpZiggc2NhbGFyKCBAcmVwb3J0X3BsdWdp
+bnMgKSA+IDAgKQoJCXsKCQkJI3JlbmRlciB0b3AtY2F0ZWdvcnkKCQkJJGNhdF9saSA9ICR1bC0+
+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZXBvc2l0b3J5LT5tYWtlX2VsZW1lbnQoICdsaScgKSApOwoJ
+CQkkY2F0X2xpLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlcG9zaXRvcnktPmh0bWxfcGhyYXNlKCAi
+UGx1Z2luL1NjcmVlbi9SZXBvcnQvJHRvcF9jYXQ6dGl0bGUiICkgKTsKCgkJCSRjYXRfdWwgPSAk
+Y2F0X2xpLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlcG9zaXRvcnktPm1ha2VfZWxlbWVudCggJ3Vs
+JywgY2xhc3MgPT4gJ2VwX3JlcG9ydF9pdGVtcycgKSApOwoKCQkJZm9yZWFjaCBteSAkciAoIEBy
+ZXBvcnRfcGx1Z2lucyApCgkJCXsKCQkJCW15ICRzdWJfbGkgPSAkY2F0X3VsLT5hcHBlbmRDaGls
+ZCggJHNlbGYtPnJlcG9zaXRvcnktPm1ha2VfZWxlbWVudCggJ2xpJyApICk7CgkJCQkkc3ViX2xp
+LT5hcHBlbmRDaGlsZCggJHItPnJlbmRlcl9hY3Rpb25fbGluayApOwoJCQkJJHByZXNldHNfYWRk
+ZWQrKzsKCQkJfQoJCX0KCX0KCgkkcHJlc2V0LT5hcHBlbmRDaGlsZCggJHVsICk7CglwdXNoIEBw
+YW5lbHMsICRwcmVzZXQ7CgoJI2N1c3RvbSByZXBvcnRzCglwdXNoIEBsYWJlbHMsICRyZXBvLT5o
+dG1sX3BocmFzZSggInJlcG9ydHNfY3VzdG9tIiApOwoKCW15ICRjdXN0b20gPSAkcmVwby0+bWFr
+ZV9lbGVtZW50KCAiZGl2IiwgaWQ9PiJjdXN0b21fcmVwb3J0IiApOwoJbXkgJGZvcm0gPSAkcmVw
+by0+cmVuZGVyX2Zvcm0oICJnZXQiICk7CgoJJGZvcm0tPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVu
+ZGVyX2NvbnRyb2xzKCAxICkgKTsKCgkjYWRkIGVhY2ggcmVwb3J0IHRvIHRoZSBzZWxlY3QgY29t
+cG9uZW50IGFuZCBnZW5lcmF0ZSBzZWFyY2ggZm9ybSBpZiByZXF1aXJlZAoJbXkgJHJlcG9ydF9z
+ZWxlY3QgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAic2VsZWN0IiwgbmFtZT0+InJlcG9ydCIsIGlk
+PT4ic2VsZWN0X3JlcG9ydCIgKTsKCW15ICVzZWFyY2hfZm9ybXM7CglteSAkY3VzdG9tX3JlcG9y
+dHMgPSAwOwoJI2ZvcmVhY2ggbXkgJHJlcG9ydF9wbHVnaW4gKCBAcGx1Z2lucyApCglmb3JlYWNo
+IG15ICRyZXBvcnRfcGx1Z2luICggc29ydCB7ICRhLT5nZXRfc3VidHlwZSBjbXAgJGItPmdldF9z
+dWJ0eXBlIH0gQHBsdWdpbnMgKQoJewoJCWlmKCAkcmVwb3J0X3BsdWdpbi0+cGFyYW0oICJjdXN0
+b20iICkgKQoJCXsJCgkJCSRjdXN0b21fcmVwb3J0cysrOwoJCQlteSAkZm9ybWlkID0gJHJlcG9y
+dF9wbHVnaW4tPntzY29uZn07CgoJCQkjYWRkIHRvIHNlbGVjdCBjb21wb25lbnQKCQkJbXkgJGlk
+ID0gJHJlcG9ydF9wbHVnaW4tPntyZXBvcnR9OwoJCQlteSAkb3B0aW9uID0gJHJlcG8tPm1ha2Vf
+ZWxlbWVudCggIm9wdGlvbiIsIHZhbHVlID0+ICRyZXBvcnRfcGx1Z2luLT5nZXRfc3VidHlwZSwg
+Zm9ybSA9PiAkZm9ybWlkICk7CgoJCQkjc2V0IGRlZmF1bHQgb3B0aW9uIGZvciBzZWxlY3QgY29t
+cG9uZW50IGlmIHJlcXVpcmVkIChpLmUuIHdlIGhhdmUgY29tZSBmcm9tIGEgcmVmaW5lIHNlYXJj
+aCBvciBuZXcgc2VhcmNoIGxpbmspCgkJCW15ICRyZWZpbmVfc2NvbmYgPSAkc2VsZi0+e3Nlc3Np
+b259LT5wYXJhbSggInNjb25mIiApOwoJCQlpZiggKCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rp
+b259IGVxICJ1cGRhdGUiIHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgIm5ld3Nl
+YXJjaCIgKSAmJiBkZWZpbmVkICRyZWZpbmVfc2NvbmYgJiYgJHJlZmluZV9zY29uZiBlcSAkZm9y
+bWlkICkKCQkJewoJCQkJJG9wdGlvbi0+c2V0QXR0cmlidXRlKCBzZWxlY3RlZCA9PiAic2VsZWN0
+ZWQiICk7CgkJCX0KCgkJCSNzZXQgb3B0aW9uIHRleHQgYW5kIGFkZCB0byBzZWxlY3QKICAJCQkk
+b3B0aW9uLT5hcHBlbmRDaGlsZCggJHJlcG9ydF9wbHVnaW4tPnJlbmRlcl90aXRsZSApOwoJCQkk
+cmVwb3J0X3NlbGVjdC0+YXBwZW5kQ2hpbGQoICRvcHRpb24gKTsKCgkJCSNjcmVhdGUgc2VhcmNo
+IGZvcm0JCQkKCQkJI2dldCByZXBvcnQgZGF0YXNldCBhbmQgYXBwcm9wcmlhdGUgc2VhcmNoIGNv
+bmZpZwoJCQlteSAkcmVwb3J0X2RzID0gJHJlcG8tPmRhdGFzZXQoICRyZXBvcnRfcGx1Z2luLT57
+c2VhcmNoZGF0YXNldGlkfSApOwoJCQlteSAkc2NvbmYgPSAkcmVwb3J0X2RzLT5zZWFyY2hfY29u
+ZmlnKCAkcmVwb3J0X3BsdWdpbi0+e3Njb25mfSApIDsKCQkJI215ICRzZWFyY2ggPSBFUHJpbnRz
+OjpTZWFyY2gtPm5ldygKCQkgICAgICAgICMgICAgICAgIGtlZXBfY2FjaGUgPT4gMSwKCSAgICAg
+ICAgICAgICAgICAjCXNlc3Npb24gPT4gJHJlcG8sCgkJICAgICAgICAjICAgICAgICBkYXRhc2V0
+ID0+ICRyZXBvcnRfZHMsCgkJICAgICAgICAjICAgICAgICAleyRzY29uZn0KCQkJIyk7CgoJCQlt
+eSAkZm9ybWF0ID0gInJlcG9ydC8iIC4gJHJlcG9ydF9kcy0+YmFzZV9pZDsKCSAgICAgICAgICAg
+ICAgICBteSAkc2VhcmNoZXhwID0gJHJlcG8tPnBsdWdpbiggIlNlYXJjaCIgKS0+cGx1Z2lucygK
+ICAgICAgICAgICAgICAgICAgICAgICAgCXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAJa2VlcF9jYWNoZSA9PiAxLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNz
+aW9uID0+ICRzZWxmLT57c2Vzc2lvbn0sCiAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAg
+IGRhdGFzZXQgPT4gJHJlcG9ydF9kcywKICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAg
+JXskc2NvbmZ9CiAgICAgICAgICAgICAgICAgICAgICAgIAl9LAogICAgICAgICAgICAgICAgICAg
+ICAgICB0eXBlID0+ICJTZWFyY2giLAogICAgICAgICAgICAgICAgICAgICAgICBjYW5fc2VhcmNo
+ID0+ICRmb3JtYXQsCiAgICAgICAgICAgICAgICAJKTsJCgkJCSRzZWFyY2hleHAtPmZyb21fZm9y
+bTsKCgkJCSNnZW5lcmF0ZSB0aGUgZm9ybQoJCQlteSAkZnJhZyA9ICRzZWxmLT5yZW5kZXJfc2Vh
+cmNoX2ZpZWxkcyggJHNlYXJjaGV4cCwgJGZvcm1pZCApOwoJCQkkc2VhcmNoX2Zvcm1zeyRmb3Jt
+aWR9ID0gJGZyYWcgdW5sZXNzIGV4aXN0cyAkc2VhcmNoX2Zvcm1zeyRmb3JtaWR9OwoJCX0JCgl9
+CgkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvcnRfc2VsZWN0ICk7CgkkZm9ybS0+YXBwZW5kQ2hp
+bGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic2NyZWVuIiwgJHNlbGYtPntzY3JlZW5p
+ZH0gKSApOwoKCSNyZW5kZXIgcG9zc2libGUgc2VhcmNoIGZvcm1zCglmb3JlYWNoIG15ICRmb3Jt
+aWQgKGtleXMgJXNlYXJjaF9mb3JtcykKCXsKCQlteSAkdGFibGUgPSAkcmVwby0+bWFrZV9lbGVt
+ZW50KCAidGFibGUiLCBjbGFzcz0+ImVwX3NlYXJjaF9maWVsZHMiLCBpZD0+JGZvcm1pZCwgc3R5
+bGU9PiJkaXNwbGF5OiBub25lIiApOwoJICAgICAgICAkZm9ybS0+YXBwZW5kQ2hpbGQoICR0YWJs
+ZSApOwoJICAgICAgICAkdGFibGUtPmFwcGVuZENoaWxkKCAkc2VhcmNoX2Zvcm1zeyRmb3JtaWR9
+ICk7Cgl9CgoJJGZvcm0tPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2NvbnRyb2xzICk7Cgkk
+Y3VzdG9tLT5hcHBlbmRDaGlsZCggJGZvcm0gKTsKCgkjamF2YXNjcmlwdCBmb3IgY2hhbmdpbmcg
+Zm9ybXMgYmFzZWQgb24gcmVwb3J0IHNlbGVjdGlvbgoJJGN1c3RvbS0+YXBwZW5kQ2hpbGQoICRy
+ZXBvLT5tYWtlX2phdmFzY3JpcHQoICdpbml0UmVwb3J0Rm9ybSgpOycgKSApOwoKCWlmKCAkY3Vz
+dG9tX3JlcG9ydHMgJiYgJHByZXNldHNfYWRkZWQgPiAwICkgI3NldCB1cCB0YWIgaW50ZXJmYWNl
+Cgl7CgkJbXkgQGxhYmVsczsKCSAgICAgICAgbXkgQHBhbmVsczsKCgkJcHVzaCBAbGFiZWxzLCAk
+cmVwby0+aHRtbF9waHJhc2UoICJyZXBvcnRzX3ByZXNldCIgKTsKCQlwdXNoIEBsYWJlbHMsICRy
+ZXBvLT5odG1sX3BocmFzZSggInJlcG9ydHNfY3VzdG9tIiApOwoKCQlwdXNoIEBwYW5lbHMsICRw
+cmVzZXQ7CgkJcHVzaCBAcGFuZWxzLCAkY3VzdG9tOwoKCQlteSAlb3B0czsKCQlpZiggJHNlbGYt
+Pntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAibmV3c2VhcmNoIiB8fCAkc2VsZi0+e3Byb2Nlc3Nv
+cn0tPnthY3Rpb259IGVxICJ1cGRhdGUiICApCgkJewoJCQkkb3B0c3tjdXJyZW50fSA9IDE7CgkJ
+fQoKCQlyZXR1cm4gJHJlcG8tPnhodG1sLT50YWJzKFxAbGFiZWxzLCBcQHBhbmVscywgJW9wdHMg
+KTsKCX0KCWVsc2lmKCAkcHJlc2V0c19hZGRlZCA+IDAgKQoJewkKCQlyZXR1cm4gJHByZXNldDsK
+CX0KCWVsc2UKCXsKCQlyZXR1cm4gJGN1c3RvbTsKCX0KfQoKc3ViIHJlbmRlcl9zZWFyY2hfZmll
+bGRzCnsKICAgICAgICBteSggJHNlbGYsICRzZWFyY2gsICRmb3JtaWQgKSA9IEBfOwoKCW15ICRl
+eHAgPSAkc2VsZi0+e3Nlc3Npb259LT5wYXJhbSggImV4cCIgKTsKCW15ICRzY29uZiA9ICRzZWxm
+LT57c2Vzc2lvbn0tPnBhcmFtKCAic2NvbmYiICk7CiAgICAgICAgaWYoIGRlZmluZWQgJGV4cCAm
+JiBkZWZpbmVkICRzY29uZiAmJiAkc2NvbmYgZXEgJGZvcm1pZCApCgl7CiAgICAgICAgICAgICAg
+ICAkc2VhcmNoLT5mcm9tX3N0cmluZyggJGV4cCApOwogIAl9CgogICAgICAgIG15ICRmcmFnID0g
+JHNlbGYtPntzZXNzaW9ufS0+bWFrZV9kb2NfZnJhZ21lbnQ7CiAgICAgICAgZm9yZWFjaCBteSAk
+c2YgKCAkc2VhcmNoLT5nZXRfbm9uX2ZpbHRlcl9zZWFyY2hmaWVsZHMgKQogICAgICAgIHsKCSAg
+ICAgICAgICRmcmFnLT5hcHBlbmRDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYt
+PntzZXNzaW9ufS0+cmVuZGVyX3Jvd193aXRoX2hlbHAoCiAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgaGVscF9wcmVmaXggPT4gJHNmLT5nZXRfZm9ybV9wcmVmaXguIl9oZWxwIiwKICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwID0+ICRzZi0+cmVuZGVyX2hlbHAsCiAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPT4gJHNmLT5yZW5kZXJfbmFtZSwK
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9PiAkc2YtPnJlbmRlciwKICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub190b2dnbGUgPT4gKCAkc2YtPntzaG93X2hl
+bHB9IGVxICJhbHdheXMiICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9faGVs
+cCA9PiAoICRzZi0+e3Nob3dfaGVscH0gZXEgIm5ldmVyIiApLAogICAgICAgIAkpICk7CiAgICAg
+ICAgfQoKICAgICAgICByZXR1cm4gJGZyYWc7Cn0KCnN1YiByZW5kZXJfY29udHJvbHMKewoJbXko
+ICRzZWxmLCAkd2l0aF9qcyApID0gQF87CgoJbXkgJGRpdiA9ICRzZWxmLT57c2Vzc2lvbn0tPm1h
+a2VfZWxlbWVudCgKICAgICAgICAgICAgICAgICJkaXYiICwKICAgICAgICAgICAgICAgIGNsYXNz
+ID0+ICJlcF9zZWFyY2hfYnV0dG9ucyIgKTsKICAgICAgICAkZGl2LT5hcHBlbmRDaGlsZCggJHNl
+bGYtPntzZXNzaW9ufS0+cmVuZGVyX2FjdGlvbl9idXR0b25zKAogICAgICAgICAgICAgICAgX29y
+ZGVyID0+IFsgInNlYXJjaCIgXSwKICAgICAgICAgICAgICAgICNuZXdzZWFyY2ggPT4gJHNlbGYt
+PntzZXNzaW9ufS0+cGhyYXNlKCAibGliL3NlYXJjaGV4cHJlc3Npb246YWN0aW9uX3Jlc2V0IiAp
+LAogICAgICAgICAgICAgICAgc2VhcmNoID0+ICRzZWxmLT57c2Vzc2lvbn0tPnBocmFzZSggImxp
+Yi9zZWFyY2hleHByZXNzaW9uOmFjdGlvbl9zZWFyY2giICkgKQogICAgICAgICk7CgkKCW15ICR4
+bWwgPSAkc2VsZi0+e3Nlc3Npb259LT54bWw7CgoJaWYoICR3aXRoX2pzICkKCXsKCQlteSAkY2xl
+YXJfZm9ybSA9ICRkaXYtPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2NsZWFyZm9ybSggJHht
+bCApICk7Cgl9CgogICAgICAgIG15ICRjbGVhcl9idG4gPSAkZGl2LT5hcHBlbmRDaGlsZCggJHht
+bC0+Y3JlYXRlX2VsZW1lbnQoICJidXR0b24iLAogICAgICAgIAl0eXBlID0+ICJidXR0b24iLAog
+ICAgICAgICAgICAgICAgb25jbGljayA9PiAiY2xlYXJGb3JtKCk7IiwKICAgICAgICAgICAgICAg
+IGNsYXNzID0+ICJlcF9mb3JtX2FjdGlvbl9idXR0b24gY2xlYXJfYnV0dG9uIiwKICAgICAgICAg
+ICAgICAgICkgKTsKICAgICAgICAkY2xlYXJfYnRuLT5hcHBlbmRDaGlsZCggJHhtbC0+Y3JlYXRl
+X3RleHRfbm9kZSggJHNlbGYtPntzZXNzaW9ufS0+aHRtbF9waHJhc2UoICJsaWIvc2VhcmNoZXhw
+cmVzc2lvbjphY3Rpb25fcmVzZXQiICkgKSApOwoJcmV0dXJuICRkaXY7Cn0KCnN1YiByZW5kZXIK
+ewoJbXkoICRzZWxmICkgPSBAXzsKCgkjIGlmIHVzZXJzIGFjY2VzcyBTY3JlZW46OlJlcG9ydCBk
+aXJlY3RseSB3ZSB3YW50IHRvIGRpc3BsYXkgc29tZSBzb3J0IG9mIG1lbnUKCSMgd2hlcmUgdXNl
+cnMgY2FuIHNlbGVjdCB2aWV3YWJsZSByZXBvcnRzCglpZiggKCAiRVByaW50czo6UGx1Z2luOjoi
+LiRzZWxmLT5nZXRfaWQgZXEgX19QQUNLQUdFX18gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0
+aW9ufSBuZSAic2VhcmNoIiApIHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgIm5l
+d3NlYXJjaCIgKQoJewkKCQlyZXR1cm4gJHNlbGYtPnJlbmRlcl9zcGxhc2hfcGFnZTsKCX0KCglt
+eSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRjaHVuayA9ICRyZXBvLT5tYWtlX2Rv
+Y19mcmFnbWVudDsKCgkkY2h1bmstPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2V4cG9ydF9i
+YXIgKTsKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZW5kZXJfZ3JvdXBfb3B0aW9ucyAp
+OwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9zb3J0X29wdGlvbnMgKTsKCglp
+ZiggJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGNodW5r
+LT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9yZWZpbmVfc2VhcmNoICk7Cgl9CgoJbXkgJGl0
+ZW1zID0gJHNlbGYtPml0ZW1zOwoJaWYoICFkZWZpbmVkICRpdGVtcyB8fCAkaXRlbXMtPmNvdW50
+ID09IDAgKQoJewoJCSMgTm8gaXRlbXMgbWVzc2FnZQoJfQoKCW15ICRqc29uOwoKCWlmKCBkZWZp
+bmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwfSAmJiAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntn
+cm91cH0gbmUgIiIgKQoJewoJCW15ICRncm91cGVkID0gJHNlbGYtPmdldF9ncm91cGVkX2l0ZW1z
+KCAkaXRlbXMsIDEgKTsKCQkkanNvbiA9IGVuY29kZV9qc29uICRncm91cGVkOwoJfQoJZWxzZQoJ
+ewoJCW15ICRpdGVtX2lkcyA9IGRlZmluZWQgJGl0ZW1zID8gJGl0ZW1zLT5pZHMgOiBbXTsKCQkk
+anNvbiA9ICJbIi5qb2luKCcsJyxAJGl0ZW1faWRzKS4iXSI7Cgl9CgogICAgICAgIG15ICR1cmwg
+PSAkcmVwby0+Y3VycmVudF91cmwoIGhvc3QgPT4gMSApOwogICAgICAgIG15ICRwYXJhbWV0ZXJz
+ID0gVVJJLT5uZXc7CiAgICAgICAgJHBhcmFtZXRlcnMtPnF1ZXJ5X2Zvcm0oCiAgICAgICAgICAg
+ICAgICAkc2VsZi0+aGlkZGVuX2JpdHMsCiAgICAgICAgKTsKICAgICAgICAkcGFyYW1ldGVycyA9
+ICRwYXJhbWV0ZXJzLT5xdWVyeTsKCQkKCW15ICRkcyA9ICRyZXBvLT5kYXRhc2V0KCAkc2VsZi0+
+cGFyYW0oICdkYXRhc2V0aWQnICkgKSBpZiBkZWZpbmVkICRzZWxmLT5wYXJhbSggJ2RhdGFzZXRp
+ZCcgKTsKCW15ICRwcmVmaXggPSAkZHMtPmJhc2VfaWQgaWYgZGVmaW5lZCAkZHM7CgoJIyB0aGUg
+bWFpbiA8ZGl2PgoJbXkgJGNvbnRhaW5lcl9pZCA9IHNwcmludGYoICJlcF9yZXBvcnRfJXNcX2Nv
+bnRhaW5lciIsICRzZWxmLT5nZXRfcmVwb3J0ICk7CgoJI3VwZGF0ZSBqYXZhc2NyaXB0IHBhcmFt
+ZXRlcnMgaWYgY29taW5nIGZyb20gYSBzZWFyY2ggcmVxdWVzdAoJaWYoICRzZWxmLT57cHJvY2Vz
+c29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJewoJCW15ICRwbHVnaW4gPSAkc2VsZi0+e3By
+b2Nlc3Nvcn0tPntyZXBvcnR9OwoJCSRwbHVnaW4gPX4gcy86LyUzQS9nOwoJCSRwYXJhbWV0ZXJz
+ID0gInNjcmVlbj0kcGx1Z2luIjsKCQkkcHJlZml4ID0gJHNlbGYtPntwcm9jZXNzb3J9LT57ZGF0
+YXNldGlkfTsKCQkkY29udGFpbmVyX2lkID0gc3ByaW50ZiggImVwX3JlcG9ydF8lc1xfY29udGFp
+bmVyIiwgJHNlbGYtPntwcm9jZXNzb3J9LT57cmVwb3J0X3BsdWdpbn0tPntyZXBvcnR9ICk7Cgl9
+CgkKCSNzaG93L2hpZGUgY29tcGxpYW5jZQoJbXkgJHNob3dfY29tcGxpYW5jZSA9IDE7Cgkkc2hv
+d19jb21wbGlhbmNlID0gJHNlbGYtPntzaG93X2NvbXBsaWFuY2V9IGlmIGRlZmluZWQgJHNlbGYt
+PntzaG93X2NvbXBsaWFuY2V9OwoKCSNjdXN0b20gbGFiZWxzCglteSAkbGFiZWxzID0gMDsKCSRs
+YWJlbHMgPSBlbmNvZGVfanNvbiAkc2VsZi0+e2xhYmVsc30gaWYgZGVmaW5lZCAkc2VsZi0+e2xh
+YmVsc307CgoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPm1ha2VfamF2YXNjcmlwdCggPDwi
+RU9KIiApICk7CmRvY3VtZW50Lm9ic2VydmUoImRvbTpsb2FkZWQiLCBmdW5jdGlvbigpIHsKCW5l
+dyBFUHJpbnRzX1NjcmVlbl9SZXBvcnRfTG9hZGVyKCB7CgkJaWRzOiAkanNvbiwKCQlzdGVwOiAy
+MCwKCQlwcmVmaXg6ICckcHJlZml4JywKCQl1cmw6ICckdXJsJywKCQlwYXJhbWV0ZXJzOiAnJHBh
+cmFtZXRlcnMnLAkJCgkJY29udGFpbmVyX2lkOiAnJGNvbnRhaW5lcl9pZCcsCgkJc2hvd19jb21w
+bGlhbmNlOiAkc2hvd19jb21wbGlhbmNlLAoJCWxhYmVsczogJGxhYmVscwoJfSApLmV4ZWN1dGUo
+KTsKCn0pOwpFT0oKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5tYWtlX2VsZW1lbnQoICdk
+aXYnLCBjbGFzcyA9PiAnZXBfcmVwb3J0X3BhZ2UnLCBpZCA9PiAkY29udGFpbmVyX2lkICkgKTsK
+Cgkjc2hvdyBzZWFyY2ggY29udHJvbHMgYWZ0ZXIgdGhlIHJlc3VsdHMgdG9vCglpZiggJHNlbGYt
+Pntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCiAgICAgICAgewogICAgICAgICAg
+ICAgICAgJGNodW5rLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9yZWZpbmVfc2VhcmNoICk7
+CiAgICAgICAgfQoKCXJldHVybiAkY2h1bms7Cn0KCgpzdWIgcmVuZGVyX2V4cG9ydF9iYXIKewoJ
+bXkoICRzZWxmICkgPSBAXzsKCglteSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRj
+aHVuayA9ICRyZXBvLT5tYWtlX2RvY19mcmFnbWVudDsKCglteSBAcGx1Z2lucyA9ICRzZWxmLT5l
+eHBvcnRfcGx1Z2luczsKCXJldHVybiAkY2h1bmsgdW5sZXNzKCBzY2FsYXIoIEBwbHVnaW5zICkg
+fHwgZGVmaW5lZCggJHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRm
+aWVsZHMiICkgKSApOwoKCW15ICRyZXBvcnRfZHMgPSAkcmVwby0+ZGF0YXNldCggJHNlbGYtPntk
+YXRhc2V0aWR9ICk7CglteSAkZm9ybSA9ICRzZWxmLT5yZW5kZXJfZm9ybTsKCSRmb3JtLT5zZXRB
+dHRyaWJ1dGUoIG1ldGhvZCA9PiAiZ2V0IiApOwoKCWlmKCBkZWZpbmVkICRzZWxmLT5yZXBvc2l0
+b3J5LT5wYXJhbSggInNlYXJjaCIgKSB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVx
+ICJzZWFyY2giICkKCXsKCQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVu
+X2ZpZWxkKCAic2VhcmNoIiwgICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPnNlcmlhbGlz
+ZSkgKTsKCX0KCQkKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9ICkKCXsK
+CQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic29ydCIs
+ICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApICk7Cgl9CQoKCWlmKCBkZWZpbmVkICRzZWxm
+LT57cHJvY2Vzc29yfS0+e2dyb3VwX2V4cH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJl
+cG8tPnJlbmRlcl9oaWRkZW5fZmllbGQoICJncm91cCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntn
+cm91cF9leHB9ICkgKTsKCX0JCgoJaWYoICFkZWZpbmVkKCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+
+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkcyIgKSApICkKCXsKCQkjbm8gY3VzdG9tIGV4cG9y
+dCBmaWVsZHMgZGVmaW5lZCwgdXNlIGV4cG9ydCBwbHVnaW5zIGRlc2lnbmVkIGZvciB0aGlzIHJl
+cG9ydAoJCW15ICRzZWxlY3QgPSAkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfb3B0
+aW9uX2xpc3QoCgkJCW5hbWUgPT4gJ2V4cG9ydCcsCgkJCXZhbHVlcyA9PiBbbWFwIHsgJF8tPmdl
+dF9zdWJ0eXBlIH0gQHBsdWdpbnNdLAoJCQlsYWJlbHMgPT4ge21hcCB7ICRfLT5nZXRfc3VidHlw
+ZSA9PiAkXy0+Z2V0X25hbWUgfSBAcGx1Z2luc30sCgkJKSApOwoJfQoJZWxzZQoJewoJCSNwcm92
+aWRlIGxpc3Qgb2YgZGVmYXVsdCBleHBvcnQgcGx1Z2lucyBmb3IgcmVwb3J0cwoJCUBwbHVnaW5z
+ID0gJHNlbGYtPmV4cG9ydF9wbHVnaW5zKCAiZ2VuZXJpYyIgKTsKCQlteSAkc2VsZWN0ID0gJGZv
+cm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX29wdGlvbl9saXN0KAoJCQluYW1lID0+ICdl
+eHBvcnQnLAoJCQl2YWx1ZXMgPT4gW21hcCB7ICRfLT5nZXRfc3VidHlwZSB9IEBwbHVnaW5zXSwK
+CQkJbGFiZWxzID0+IHttYXAgeyAkXy0+Z2V0X3N1YnR5cGUgPT4gJF8tPmdldF9uYW1lIH0gQHBs
+dWdpbnN9LAoJCSkgKTsKCgkJI2NyZWF0ZSBsYWJlbHMgYW5kIHBhbmVscyBmb3IgdGFiYmVkIGlu
+dGVyZmFjZWQKCQlteSAkeG1sID0gJHJlcG8tPnhtbDsKCQlteSAkeGh0bWwgPSAkcmVwby0+eGh0
+bWw7CgoJCW15ICRzZWxlY3RfYWxsID0gJGZvcm0tPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVy
+X3NlbGVjdGFsbCggJHhtbCApICk7CgkJbXkgJHNlbGVjdF9idG4gPSAkZm9ybS0+YXBwZW5kQ2hp
+bGQoICR4bWwtPmNyZWF0ZV9lbGVtZW50KCAiYnV0dG9uIiwKCSAgICAgICAgICAgICAgICAgICAg
+dHlwZSA9PiAiYnV0dG9uIiwKCSAgICAgICAgICAgICAgICAgICAgb25jbGljayA9PiAidG9nZ2xl
+Q2hlY2tib3hlcygpOyIsCgkgICAgICAgICAgICAgICAgICAgIGNsYXNzID0+ICJlcF9mb3JtX2Fj
+dGlvbl9idXR0b24gc2VsZWN0X2J1dHRvbiIsCgkJKSApOwoJICAgIAkkc2VsZWN0X2J0bi0+YXBw
+ZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV90ZXh0X25vZGUoICRyZXBvLT5odG1sX3BocmFzZSggInJl
+cG9ydF9zZWxlY3QiICkgKSApOwoKCQkjYWxsb3cgdXNlciB0byBjaG9vc2Ugd2hpY2ggZmllbGRz
+IHRoZXkgd2FudCB0byBleHBvcnQKCQlteSAkZXhwb3J0X29wdGlvbnMgPSAkcmVwby0+bWFrZV9l
+bGVtZW50KCAiZGl2IiApOwoKCQlteSBAa2V5czsKCQlpZiggZGVmaW5lZCAkcmVwby0+Y29uZmln
+KCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX29yZGVyIiApICkKCQl7CgkJCUBr
+ZXlzID0gQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxk
+X29yZGVyIiApfTsKCQl9CgkJZWxzZQoJCXsKCQkJQGtleXMgPSBrZXlzICV7JHJlcG8tPmNvbmZp
+ZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZHMiICl9OyAKCQl9CgkJZm9yZWFj
+aCBteSAka2V5ICggQGtleXMgKQoJCXsKCQkJI2NyZWF0ZSBhIG5ldyBsaXN0CQkJCgkJCW15ICR1
+bCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJ1bCIsCgkgICAgICAgICAgICAgICAgCXN0eWxlID0+
+ICJsaXN0LXN0eWxlLXR5cGU6IG5vbmUiCgkgICAgICAgIAkpOwoJCQkKCQkJbXkgJGNvdW50ID0g
+MDsgI2NvdW50IGhvdyBtYW55IGZpZWxkcyB3ZSBhZGQKCQkJZm9yZWFjaCBteSAkZmllbGRuYW1l
+KCBAeyRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiAp
+LT57JGtleX19ICkKCQkJewoJCQkJaWYoIGRlZmluZWQgJHJlcG8tPmNvbmZpZyggJHNlbGYtPntl
+eHBvcnRfY29uZn0sICJjdXN0b21fZXhwb3J0IiApICYmIGV4aXN0cyAkeyRyZXBvLT5jb25maWco
+ICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiY3VzdG9tX2V4cG9ydCIgKX17JGZpZWxkbmFtZX0gKSAj
+d2UgaGF2ZSBhIGN1c3RvbSBleHBvcnQgZnVuY3Rpb24gaW5zdGVhZCAKCQkJCXsKCQkJCQkkY291
+bnQrKzsKCQkJCQkkc2VsZi0+X2V4cG9ydF9maWVsZF9jaGVja2JveCggJHJlcG8sICRmaWVsZG5h
+bWUsICR1bCwgJHJlcG8tPmh0bWxfcGhyYXNlKCAiZXhwb3J0ZmllbGRvcHRpb25zOiRmaWVsZG5h
+bWUiICkgKTsgCgkJCQl9CgkJCQllbHNpZiggZGVmaW5lZCBFUHJpbnRzOjpVdGlsczo6ZmllbGRf
+ZnJvbV9jb25maWdfc3RyaW5nKCAkcmVwb3J0X2RzLCAkZmllbGRuYW1lICkgKQoJCQkJewoJCQkJ
+CW15ICRmaWVsZCA9IEVQcmludHM6OlV0aWxzOjpmaWVsZF9mcm9tX2NvbmZpZ19zdHJpbmcoICRy
+ZXBvcnRfZHMsICRmaWVsZG5hbWUgKTsKCQkJCQkkY291bnQrKzsKICAgICAgIAkJCSAgICAgICAg
+CSRzZWxmLT5fZXhwb3J0X2ZpZWxkX2NoZWNrYm94KCAkcmVwbywgJGZpZWxkbmFtZSwgJHVsLCAk
+ZmllbGQtPnJlbmRlcl9uYW1lICk7CgoJCQkJfQoJCQl9CgkJCWlmKCAkY291bnQgKSAjb25seSBh
+ZGQgb3B0aW9ucyBpZiB3ZSBoYXZlIGFueSBmaWVsZHMgdG8gc2hvdwoJCQl7CgkJCQlteSAkZGl2
+ID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImRpdiIsIGNsYXNzPT4icmVwb3J0X2V4cG9ydF9vcHRp
+b25zIiApOwoJCQkJJGRpdi0+YXBwZW5kQ2hpbGQoIG15ICRoID0gJHJlcG8tPm1ha2VfZWxlbWVu
+dCggImg0IiApICk7CgkJCQkkaC0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImV4
+cG9ydGZpZWxkczoka2V5IiApICk7CQoJCQkJJGRpdi0+YXBwZW5kQ2hpbGQoICR1bCApOwoJCQkJ
+JGV4cG9ydF9vcHRpb25zLT5hcHBlbmRDaGlsZCggJGRpdiApOwoJCQl9CiAgICAgICAJCX0KCQkk
+Zm9ybS0+YXBwZW5kQ2hpbGQoICRleHBvcnRfb3B0aW9ucyApOwoJfQoKCSRmb3JtLT5hcHBlbmRD
+aGlsZCggCgkJJHJlcG8tPnJlbmRlcl9idXR0b24oCgkJCW5hbWUgPT4gIl9hY3Rpb25fZXhwb3J0
+IiwKCQkJY2xhc3MgPT4gImVwX2Zvcm1fYWN0aW9uX2J1dHRvbiIsCgkJCXZhbHVlID0+ICRyZXBv
+LT5waHJhc2UoICdjZ2kvdXNlcnMvZWRpdF9lcHJpbnQ6ZXhwb3J0JyApCgkpICk7CgoJI2NyZWF0
+ZSBhIGNvbGxhcHNpYmxlIGJveAoJbXkgJGltYWdlc3VybCA9ICRyZXBvLT5jdXJyZW50X3VybCgg
+cGF0aCA9PiAic3RhdGljIiwgInN0eWxlL2ltYWdlcyIgKTsKCW15ICVvcHRpb25zOwoJJG9wdGlv
+bnN7c2Vzc2lvbn0gPSAkcmVwbzsKICAgICAgICAkb3B0aW9uc3tpZH0gPSAiZXBfcmVwb3J0X2V4
+cG9ydCI7CiAgICAgICAgJG9wdGlvbnN7dGl0bGV9ID0gJHJlcG8tPmh0bWxfcGhyYXNlKCAiZXhw
+b3J0X3RpdGxlIiApOwogICAgICAgICRvcHRpb25ze2NvbGxhcHNlZH0gPSAxOwoJJG9wdGlvbnN7
+Y29udGVudH0gPSAkZm9ybTsKICAgICAgICAkb3B0aW9uc3tzaG93X2ljb25fdXJsfSA9ICIkaW1h
+Z2VzdXJsL211bHRpX2Rvd24ucG5nIjsKCSRvcHRpb25ze2hpZGVfaWNvbl91cmx9ID0gIiRpbWFn
+ZXN1cmwvbXVsdGlfdXAucG5nIjsKCglteSAkYm94ID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImRp
+diIsIHN0eWxlPT4idGV4dC1hbGlnbjogbGVmdCIgKTsKCSRib3gtPmFwcGVuZENoaWxkKCBFUHJp
+bnRzOjpCb3g6OnJlbmRlciggJW9wdGlvbnMgKSApOwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJGJv
+eCApOwoKCXJldHVybiAkY2h1bms7Cn0KCnN1YiByZW5kZXJfc29ydF9vcHRpb25zCnsKCW15KCAk
+c2VsZiApID0gQF87CgoJbXkgJHJlcG8gPSAkc2VsZi0+cmVwb3NpdG9yeTsKCglteSAkY2h1bmsg
+PSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7CgoJcmV0dXJuICRjaHVuayB1bmxlc3MoIGRlZmlu
+ZWQoICRyZXBvLT5jb25maWcoICRzZWxmLT57c29ydF9jb25mfSwgInNvcnRmaWVsZHMiICkgKSAp
+OwoKCW15ICRzb3J0X2NvbmYgPSAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e3NvcnRfY29uZn0sICJz
+b3J0ZmllbGRzIiApOwoKCSNidWlsZCB0aGUgZm9ybQoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVy
+X2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRlKCBuYW1lID0+ICJzb3J0X3JlcG9ydCIgKTsKICAg
+ICAgICAkZm9ybS0+c2V0QXR0cmlidXRlKCBtZXRob2QgPT4gImdldCIgKTsKCSRjaHVuay0+YXBw
+ZW5kQ2hpbGQoICRmb3JtICk7CgkKCWlmKCBkZWZpbmVkICRyZXBvLT5wYXJhbSggInNlYXJjaCIg
+KSB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVxICJzZWFyY2giICkKCXsKCQkkZm9y
+bS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic2VhcmNoIiwgICRz
+ZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPnNlcmlhbGlzZSkgKTsKCX0KCglpZiggZGVmaW5l
+ZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9leHB9ICkKCXsKCQkkZm9ybS0+YXBwZW5kQ2hp
+bGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAiZ3JvdXAiLCAgJHNlbGYtPntwcm9jZXNz
+b3J9LT57Z3JvdXBfZXhwfSApICk7Cgl9CgoJI2Rpc3BsYXkgdGhlIGxpbmtzIHRoYXQgd2lsbCB0
+cmlnZ2VyIHRoZSBmb3JtCglteSAkZmlyc3QgPSAxOwoJbXkgJHNvcnRfbGlua3MgPSAkcmVwby0+
+bWFrZV9kb2NfZnJhZ21lbnQ7Cglmb3JlYWNoIG15ICRzb3J0X25hbWUgKCBrZXlzICV7JHNvcnRf
+Y29uZn0gKQogICAgICAgIHsKCQlteSAkc29ydF92YWx1ZSA9ICRzb3J0X2NvbmYtPnskc29ydF9u
+YW1lfTsKCQlpZiggJGZpcnN0ICkKCQl7CgkJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJl
+bmRlcl9oaWRkZW5fZmllbGQoICJzb3J0IiwgJHNvcnRfdmFsdWUpICk7CgkJfQoKCQlpZiggISRm
+aXJzdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAJJHNvcnRfbGlua3MtPmFw
+cGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJh
+dG9yIiApICk7CiAgICAgICAgICAgICAgICB9CgkJCgkJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9j
+ZXNzb3J9LT57c29ydH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gZXEgJHNvcnRfdmFs
+dWUgKQoJCXsKCQkJbXkgJHN0cm9uZyA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJzdHJvbmciICk7
+CgkJCSRzdHJvbmctPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57c29y
+dF9jb25mfSAuICI6c29ydDoiIC4gJHNvcnRfbmFtZSApICk7CgkJCSRzb3J0X2xpbmtzLT5hcHBl
+bmRDaGlsZCggJHN0cm9uZyApOwoJCX0KCQllbHNlCgkJewoJCQlteSAkbGluayA9ICRyZXBvLT5y
+ZW5kZXJfbGluayggJ2phdmFzY3JpcHQ6c29ydF9yZXBvcnQoIicuJHNvcnRfdmFsdWUuJyIpJyAp
+OwkKCQkJJGxpbmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57c29y
+dF9jb25mfSAuICI6c29ydDoiIC4gJHNvcnRfbmFtZSApICk7CgkJCSRzb3J0X2xpbmtzLT5hcHBl
+bmRDaGlsZCggJGxpbmsgKTsKCQl9CgkJJGZpcnN0ID0gMDsKICAgICAgICB9ICAgICAgICAgICAK
+CSRjaHVuay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggIlJlcG9ydDpzb3J0X2xp
+bmtzIiwgbGlua3M9PiRzb3J0X2xpbmtzICkgKTsKCXJldHVybiAkY2h1bms7Cn0KCnN1YiByZW5k
+ZXJfZ3JvdXBfb3B0aW9ucwp7CglteSggJHNlbGYgKSA9IEBfOwoKCW15ICRyZXBvID0gJHNlbGYt
+PnJlcG9zaXRvcnk7CgoJbXkgJGNodW5rID0gJHJlcG8tPm1ha2VfZG9jX2ZyYWdtZW50OwoKCXJl
+dHVybiAkY2h1bmsgdW5sZXNzKCBkZWZpbmVkKCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2dyb3Vw
+X2NvbmZ9LCAiZ3JvdXBmaWVsZHMiICkgKSApOwoKCW15ICRncm91cF9jb25mID0gJHJlcG8tPmNv
+bmZpZyggJHNlbGYtPntncm91cF9jb25mfSwgImdyb3VwZmllbGRzIiApOwoKCSNidWlsZCB0aGUg
+Zm9ybQoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVyX2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRl
+KCBuYW1lID0+ICJncm91cF9yZXBvcnQiICk7CiAgICAgICAgJGZvcm0tPnNldEF0dHJpYnV0ZSgg
+bWV0aG9kID0+ICJnZXQiICk7CgkkY2h1bmstPmFwcGVuZENoaWxkKCAkZm9ybSApOwoJCglpZigg
+ZGVmaW5lZCAkcmVwby0+cGFyYW0oICJzZWFyY2giICkgfHwgJHNlbGYtPntwcm9jZXNzb3J9LT57
+YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVu
+ZGVyX2hpZGRlbl9maWVsZCggInNlYXJjaCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9
+LT5zZXJpYWxpc2UpICk7Cgl9CgoJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57c29y
+dH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQo
+ICJzb3J0IiwgICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9ICkgKTsKCX0KCgkjZGlzcGxheSB0
+aGUgbGlua3MgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGZvcm0KCW15ICRmaXJzdCA9IDE7CglteSAk
+Z3JvdXBfbGlua3MgPSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7Cglmb3JlYWNoIG15ICRncm91
+cF92YWx1ZSAoIEB7JGdyb3VwX2NvbmZ9ICkKICAgICAgICB7CgkJbXkgKCRncm91cF9maWVsZCkg
+PSBzcGxpdCgvOy8sICRncm91cF92YWx1ZSApOwoJCWlmKCAkZmlyc3QgKQoJCXsKCQkJJGZvcm0t
+PmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggImdyb3VwIiwgJGdyb3Vw
+X3ZhbHVlKSApOwoJCX0KCgkJaWYoICEkZmlyc3QgKQogICAgICAgICAgICAgICAgewogICAgICAg
+ICAgICAgICAgCSRncm91cF9saW5rcy0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSgg
IlVwZGF0ZS9WaWV3czpncm91cF9zZXBlcmF0b3IiICkgKTsKICAgICAgICAgICAgICAgIH0KCQkK
-CQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSAmJiAkc2VsZi0+e3Byb2Nl
-c3Nvcn0tPntzb3J0fSBlcSAkc29ydF92YWx1ZSApCgkJewoJCQlteSAkc3Ryb25nID0gJHJlcG8t
-Pm1ha2VfZWxlbWVudCggInN0cm9uZyIgKTsKCQkJJHN0cm9uZy0+YXBwZW5kQ2hpbGQoICRyZXBv
-LT5odG1sX3BocmFzZSggJHNlbGYtPntzb3J0X2NvbmZ9IC4gIjpzb3J0OiIgLiAkc29ydF9uYW1l
-ICkgKTsKCQkJJHNvcnRfbGlua3MtPmFwcGVuZENoaWxkKCAkc3Ryb25nICk7CgkJfQoJCWVsc2UK
-CQl7CgkJCW15ICRsaW5rID0gJHJlcG8tPnJlbmRlcl9saW5rKCAnamF2YXNjcmlwdDpzb3J0X3Jl
-cG9ydCgiJy4kc29ydF92YWx1ZS4nIiknICk7CQoJCQkkbGluay0+YXBwZW5kQ2hpbGQoICRyZXBv
-LT5odG1sX3BocmFzZSggJHNlbGYtPntzb3J0X2NvbmZ9IC4gIjpzb3J0OiIgLiAkc29ydF9uYW1l
-ICkgKTsKCQkJJHNvcnRfbGlua3MtPmFwcGVuZENoaWxkKCAkbGluayApOwoJCX0KCQkkZmlyc3Qg
-PSAwOwogICAgICAgIH0gICAgICAgICAgIAoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0
-bWxfcGhyYXNlKCAiUmVwb3J0OnNvcnRfbGlua3MiLCBsaW5rcz0+JHNvcnRfbGlua3MgKSApOwoJ
-cmV0dXJuICRjaHVuazsKfQoKCnN1YiByZW5kZXJfZ3JvdXBfb3B0aW9ucwp7CglteSggJHNlbGYg
-KSA9IEBfOwoKCW15ICRyZXBvID0gJHNlbGYtPnJlcG9zaXRvcnk7CgoJbXkgJGNodW5rID0gJHJl
-cG8tPm1ha2VfZG9jX2ZyYWdtZW50OwoKCXJldHVybiAkY2h1bmsgdW5sZXNzKCBkZWZpbmVkKCAk
-cmVwby0+Y29uZmlnKCAkc2VsZi0+e2dyb3VwX2NvbmZ9LCAiZ3JvdXBmaWVsZHMiICkgKSApOwoK
-CW15ICRncm91cF9jb25mID0gJHJlcG8tPmNvbmZpZyggJHNlbGYtPntncm91cF9jb25mfSwgImdy
-b3VwZmllbGRzIiApOwoKCSNidWlsZCB0aGUgZm9ybQoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVy
-X2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRlKCBuYW1lID0+ICJncm91cF9yZXBvcnQiICk7CiAg
-ICAgICAgJGZvcm0tPnNldEF0dHJpYnV0ZSggbWV0aG9kID0+ICJnZXQiICk7CgkkY2h1bmstPmFw
-cGVuZENoaWxkKCAkZm9ybSApOwoJCglpZiggZGVmaW5lZCAkcmVwby0+cGFyYW0oICJzZWFyY2gi
-ICkgfHwgJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGZv
-cm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNlYXJjaCIsICAk
-c2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5zZXJpYWxpc2UpICk7Cgl9CgoJaWYoIGRlZmlu
-ZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCgg
-JHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQoICJzb3J0IiwgICRzZWxmLT57cHJvY2Vzc29yfS0+
-e3NvcnR9ICkgKTsKCX0KCgkjZGlzcGxheSB0aGUgbGlua3MgdGhhdCB3aWxsIHRyaWdnZXIgdGhl
-IGZvcm0KCW15ICRmaXJzdCA9IDE7CglteSAkZ3JvdXBfbGlua3MgPSAkcmVwby0+bWFrZV9kb2Nf
-ZnJhZ21lbnQ7Cglmb3JlYWNoIG15ICRncm91cF92YWx1ZSAoIEB7JGdyb3VwX2NvbmZ9ICkKICAg
-ICAgICB7CgkJbXkgKCRncm91cF9maWVsZCkgPSBzcGxpdCgvOy8sICRncm91cF92YWx1ZSApOwoJ
-CWlmKCAkZmlyc3QgKQoJCXsKCQkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hp
-ZGRlbl9maWVsZCggImdyb3VwIiwgJGdyb3VwX3ZhbHVlKSApOwoJCX0KCgkJaWYoICEkZmlyc3Qg
-KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgCSRncm91cF9saW5rcy0+YXBwZW5k
-Q2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggIlVwZGF0ZS9WaWV3czpncm91cF9zZXBlcmF0b3Ii
-ICkgKTsKICAgICAgICAgICAgICAgIH0KCQkKCQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nv
-cn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9IGVxICRncm91cF9maWVs
-ZCApCgkJewoJCQlteSAkc3Ryb25nID0gJHJlcG8tPm1ha2VfZWxlbWVudCggInN0cm9uZyIgKTsK
-CQkJJHN0cm9uZy0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggJHNlbGYtPntncm91
-cF9jb25mfSAuICI6Z3JvdXA6IiAuICRncm91cF9maWVsZCApICk7CgkJCSRncm91cF9saW5rcy0+
-YXBwZW5kQ2hpbGQoICRzdHJvbmcgKTsKCQl9CgkJZWxzZQoJCXsKCQkJbXkgJGxpbmsgPSAkcmVw
-by0+cmVuZGVyX2xpbmsoICdqYXZhc2NyaXB0Omdyb3VwX3JlcG9ydCgiJy4kZ3JvdXBfdmFsdWUu
-JyIpJyApOwkKCQkJJGxpbmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxm
-LT57Z3JvdXBfY29uZn0gLiAiOmdyb3VwOiIgLiAkZ3JvdXBfZmllbGQgKSApOwoJCQkkZ3JvdXBf
-bGlua3MtPmFwcGVuZENoaWxkKCAkbGluayApOwoJCX0KCQkkZmlyc3QgPSAwOwogICAgICAgIH0g
-ICAgICAgICAgIAoJCgkjbm8gZ3JvdXBpbmcgbGluayBhdCB0aGUgZW5kCgkkZ3JvdXBfbGlua3Mt
-PmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2Vw
-ZXJhdG9yIiApICk7CglpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYg
-JHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9IG5lICIiICkKCXsKCQlteSAkbGluayA9ICRyZXBv
-LT5yZW5kZXJfbGluayggJ2phdmFzY3JpcHQ6Z3JvdXBfcmVwb3J0KCIiKScgKTsJCgkJJGxpbmst
-PmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJyZXBvcnQ6bm9fZ3JvdXBpbmciICkg
-KTsKCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkbGluayApOwoJfQoJZWxzZQoJewoJCW15
-ICRzdHJvbmcgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAic3Ryb25nIiApOwogCQkkc3Ryb25nLT5h
-cHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAicmVwb3J0Om5vX2dyb3VwaW5nIiApICk7
-CgkJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGlsZCggJHN0cm9uZyApOwoJfQoJCgkkY2h1bmstPmFw
-cGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJSZXBvcnQ6Z3JvdXBfbGlua3MiLCBsaW5r
-cz0+JGdyb3VwX2xpbmtzICkgKTsKCglyZXR1cm4gJGNodW5rOwp9CgoKI2FkZHMgYSBuZXcgY2hl
-Y2tib3ggdG8gYWxsb3cgdGhlIHVzZXIgdG8gY2hvb3NlIHdoaWNoIGZpZWxkcyB0byBleHBvcnQK
-c3ViIF9leHBvcnRfZmllbGRfY2hlY2tib3gKewoJbXkoICRzZWxmLCAkcmVwbywgJGZpZWxkbmFt
-ZSwgJHVsLCAkZmllbGRsYWJlbCApID0gQF87CgoJbXkgJGxpID0gJHJlcG8tPm1ha2VfZWxlbWVu
-dCggImxpIiApOwoJJHVsLT5hcHBlbmRDaGlsZCggJGxpICk7CgogICAgICAgIG15ICRjaGVja2Jv
-eCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJpbnB1dCIsIHR5cGUgPT4gImNoZWNrYm94IiwgaWQg
-PT4gJGZpZWxkbmFtZSwgbmFtZSA9PiAkZmllbGRuYW1lLCB2YWx1ZSA9PiAkZmllbGRuYW1lICk7
-CglpZiggZGVmaW5lZCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9y
-dGZpZWxkX2RlZmF1bHRzIiApICkKCXsKCQlpZiggKCBncmVwIHsgJGZpZWxkbmFtZSBlcSAkXyB9
-IEB7JHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZF9kZWZh
-dWx0cyIgKX0gKSB8fCAoIHNjYWxhciggQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9j
-b25mfSwgImV4cG9ydGZpZWxkX2RlZmF1bHRzIiApfSApID09IDAgKSApCgkJewoJCQkjb25seSBj
-aGVjayBkZWZhdWx0cyBvciBjaGVjayBldmVyeXRoaW5nIGlmIGRlZmF1bHRzIG5vdCBkZWZpbmVk
-CgkJCSRjaGVja2JveC0+c2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJ5ZXMiICk7CgkJfQoJfQoJ
-bXkgJGxhYmVsID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImxhYmVsIiwgZm9yID0+ICRmaWVsZG5h
-bWUgKTsKCSRsYWJlbC0+YXBwZW5kQ2hpbGQoICRmaWVsZGxhYmVsICk7CgoJJGxpLT5hcHBlbmRD
-aGlsZCggJGNoZWNrYm94ICk7CgkkbGktPmFwcGVuZENoaWxkKCAkbGFiZWwgKTsKfQoKIyMjIHV0
-aWxpdHkgbWV0aG9kcwoKIyBUT0RPIHNob3VsZCB1c2UgIkpTT04iIHBhY2thZ2UKc3ViIHRvX2pz
-b24KewogICAgICAgIG15KCAkc2VsZiwgJG9iamVjdCApID0gQF87CgoJcmV0dXJuICIiIGlmKCAh
-ZGVmaW5lZCAkb2JqZWN0ICk7CgojIFVURi04IGlzc3VlczoKIwlyZXR1cm4gSlNPTi0+bmV3LT51
-dGY4KDEpLT5lbmNvZGUoICRvYmplY3QgKTsKCiAgICAgICAgaWYoIHJlZiggJG9iamVjdCApIGVx
-ICdIQVNIJyApCiAgICAgICAgewogICAgICAgICAgICAgICAgbXkgQHN0dWZmOwogICAgICAgICAg
-ICAgICAgd2hpbGUoIG15KCAkaywgJHYgKSA9IGVhY2goICUkb2JqZWN0ICkgKQogICAgICAgICAg
-ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGlmKCAhRVByaW50czo6VXRpbHM6
-OmlzX3NldCggJHYgKSApOyAgICAgICAjIG9yICdudWxsJyA/CiAgICAgICAgICAgICAgICAgICAg
-ICAgIHB1c2ggQHN0dWZmLCBFUHJpbnRzOjpVdGlsczo6anNfc3RyaW5nKCAkayApLic6Jy4kc2Vs
-Zi0+dG9fanNvbiggJHYgKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJu
-ICd7JyAuIGpvaW4oICIsIiwgQHN0dWZmICkgLiAnfSc7CiAgICAgICAgfQogICAgICAgIGVsc2lm
-KCByZWYoICRvYmplY3QgKSBlcSAnQVJSQVknICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBt
-eSBAc3R1ZmY7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCBAJG9iamVjdCApCiAgICAgICAgICAg
-ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYoICFFUHJpbnRzOjpVdGlsczo6
-aXNfc2V0KCAkXyApICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHN0dWZmLCAkc2Vs
-Zi0+dG9fanNvbiggJF8gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy
-biAnWycgLiBqb2luKCAiLCIsIEBzdHVmZiApIC4gJ10nOwogICAgICAgIH0KCiAgICAgICAgcmV0
-dXJuIEVQcmludHM6OlV0aWxzOjpqc19zdHJpbmcoICRvYmplY3QgKTsKfQoKc3ViIGV4cG9ydF9w
-bHVnaW5zCnsKICAgICAgICBteSggJHNlbGYsICRnZW5lcmljICkgPSBAXzsKCglteSBAcGx1Z2lu
-X2lkczsKCWlmKCAkZ2VuZXJpYyApCgl7CiAJCUBwbHVnaW5faWRzID0gJHNlbGYtPnJlcG9zaXRv
-cnktPnBsdWdpbl9saXN0KAogICAgICAgICAgICAgICAgCXR5cGUgPT4gIkV4cG9ydCIsCgkgICAg
-ICAgICAgICAgICAgY2FuX2FjY2VwdCA9PiAicmVwb3J0L2dlbmVyaWMiLAogICAgICAgIAkgICAg
-ICAgIGlzX3Zpc2libGUgPT4gInN0YWZmIiwKCQkJaXNfYWR2ZXJ0aXNlZCA9PiAxLAoJICAgICAg
-ICApOwoJfQoJZWxzZQoJewogICAgICAgIAlAcGx1Z2luX2lkcyA9ICRzZWxmLT5yZXBvc2l0b3J5
+CQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9j
+ZXNzb3J9LT57Z3JvdXB9IGVxICRncm91cF9maWVsZCApCgkJewoJCQlteSAkc3Ryb25nID0gJHJl
+cG8tPm1ha2VfZWxlbWVudCggInN0cm9uZyIgKTsKCQkJJHN0cm9uZy0+YXBwZW5kQ2hpbGQoICRy
+ZXBvLT5odG1sX3BocmFzZSggJHNlbGYtPntncm91cF9jb25mfSAuICI6Z3JvdXA6IiAuICRncm91
+cF9maWVsZCApICk7CgkJCSRncm91cF9saW5rcy0+YXBwZW5kQ2hpbGQoICRzdHJvbmcgKTsKCQl9
+CgkJZWxzZQoJCXsKCQkJbXkgJGxpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmsoICdqYXZhc2NyaXB0
+Omdyb3VwX3JlcG9ydCgiJy4kZ3JvdXBfdmFsdWUuJyIpJyApOwkKCQkJJGxpbmstPmFwcGVuZENo
+aWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57Z3JvdXBfY29uZn0gLiAiOmdyb3VwOiIg
+LiAkZ3JvdXBfZmllbGQgKSApOwoJCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkbGluayAp
+OwoJCX0KCQkkZmlyc3QgPSAwOwogICAgICAgIH0gICAgICAgICAgIAoJCgkjbm8gZ3JvdXBpbmcg
+bGluayBhdCB0aGUgZW5kCgkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9w
+aHJhc2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJhdG9yIiApICk7CglpZiggZGVmaW5lZCAk
+c2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9
+IG5lICIiICkKCXsKCQlteSAkbGluayA9ICRyZXBvLT5yZW5kZXJfbGluayggJ2phdmFzY3JpcHQ6
+Z3JvdXBfcmVwb3J0KCIiKScgKTsJCgkJJGxpbmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9w
+aHJhc2UoICJyZXBvcnQ6bm9fZ3JvdXBpbmciICkgKTsKCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENo
+aWxkKCAkbGluayApOwoJfQoJZWxzZQoJewoJCW15ICRzdHJvbmcgPSAkcmVwby0+bWFrZV9lbGVt
+ZW50KCAic3Ryb25nIiApOwogCQkkc3Ryb25nLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhy
+YXNlKCAicmVwb3J0Om5vX2dyb3VwaW5nIiApICk7CgkJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGls
+ZCggJHN0cm9uZyApOwoJfQoJCgkkY2h1bmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJh
+c2UoICJSZXBvcnQ6Z3JvdXBfbGlua3MiLCBsaW5rcz0+JGdyb3VwX2xpbmtzICkgKTsKCglyZXR1
+cm4gJGNodW5rOwp9CgpzdWIgcmVuZGVyX3JlZmluZV9zZWFyY2gKewoJbXkoICRzZWxmICkgPSBA
+XzsKCglteSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRjaHVuayA9ICRyZXBvLT5t
+YWtlX2RvY19mcmFnbWVudDsKCQoJaWYoIGRlZmluZWQgJHJlcG8tPnBhcmFtKCAic2VhcmNoIiAp
+IHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJewoJCW15ICRl
+c2NleHAgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5zZXJpYWxpc2U7CgkJbXkgJGNh
+Y2hlaWQgPSAkcmVwby0+cGFyYW0oICJjYWNoZSIgKTsKCQlteSAkc2NvbmYgPSAkc2VsZi0+e3Nj
+b25mfTsJCgoJCSNzZXQgdXAgbmV3IHNlYXJjaCBsaW5rCgkJbXkgJG5ld19iYXNldXJsID0gVVJJ
+LT5uZXcoICRzZWxmLT57c2Vzc2lvbn0tPmdldF91cmkgKTsKICAgICAgICAJJG5ld19iYXNldXJs
+LT5xdWVyeV9mb3JtKAoJICAgICAgICAgICAgICAgIHNjcmVlbiA9PiAiUmVwb3J0IiwKCQkJc2Nv
+bmYgPT4gJHNjb25mLAogICAgICAgIAkpOwoKCQlteSAkc2VhcmNoX2xpbmtzID0gJHJlcG8tPm1h
+a2VfZG9jX2ZyYWdtZW50OwoJCW15ICRuZXdfbGluayA9ICRyZXBvLT5yZW5kZXJfbGluayggIiRu
+ZXdfYmFzZXVybCZfYWN0aW9uX25ld3NlYXJjaD0xIiApOwoJICAgCSRuZXdfbGluay0+YXBwZW5k
+Q2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImxpYi9zZWFyY2hleHByZXNzaW9uOm5ldyIgKSAp
+OwoJCSRzZWFyY2hfbGlua3MtPmFwcGVuZENoaWxkKCAkbmV3X2xpbmsgKTsKCgkJI2FkZCBhIHNl
+cGFyYXRvci4uLgoJCSRzZWFyY2hfbGlua3MtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJh
+c2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJhdG9yIiApICk7CgoJCSNzZXQgdXAgcmVmaW5l
+IHNlYXJjaCBsaW5rCgkJbXkgJHJlZmluZV9iYXNldXJsID0gVVJJLT5uZXcoICRzZWxmLT57c2Vz
+c2lvbn0tPmdldF91cmkgKTsKICAgICAgICAJJHJlZmluZV9iYXNldXJsLT5xdWVyeV9mb3JtKAoJ
+ICAgICAgICAJY2FjaGUgPT4gJGNhY2hlaWQsCgkgICAgICAgICAgICAgICAgZXhwID0+ICRlc2Nl
+eHAsCiAgICAgICAgCSAgICAgICAgc2NyZWVuID0+ICJSZXBvcnQiLAogICAgICAgICAgICAgICAg
+CWRhdGFzZXQgPT4gJHNlbGYtPntkYXRhc2V0aWR9LAogICAgICAgICAgICAgICAgCW9yZGVyID0+
+ICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPntjdXN0b21fb3JkZXJ9LAoJCQlzY29uZiA9
+PiAkc2NvbmYsCiAgICAgICAgCSk7CgoJCW15ICRyZWZpbmVfbGluayA9ICRyZXBvLT5yZW5kZXJf
+bGluayggIiRyZWZpbmVfYmFzZXVybCZfYWN0aW9uX3VwZGF0ZT0xIiApOwogICAgICAJCSRyZWZp
+bmVfbGluay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImxpYi9zZWFyY2hleHBy
+ZXNzaW9uOnJlZmluZSIgKSApOyAgIAkgICAgICAgICAKCSAgICAgICAgJHNlYXJjaF9saW5rcy0+
+YXBwZW5kQ2hpbGQoICRyZWZpbmVfbGluayApOwoKCQkkY2h1bmstPmFwcGVuZENoaWxkKCAkcmVw
+by0+aHRtbF9waHJhc2UoICJSZXBvcnQ6c2VhcmNoX2xpbmtzIiwgbGlua3M9PiRzZWFyY2hfbGlu
+a3MgKSApOwoJfQoKCXJldHVybiAkY2h1bms7Cn0KCgojYWRkcyBhIG5ldyBjaGVja2JveCB0byBh
+bGxvdyB0aGUgdXNlciB0byBjaG9vc2Ugd2hpY2ggZmllbGRzIHRvIGV4cG9ydApzdWIgX2V4cG9y
+dF9maWVsZF9jaGVja2JveAp7CglteSggJHNlbGYsICRyZXBvLCAkZmllbGRuYW1lLCAkdWwsICRm
+aWVsZGxhYmVsICkgPSBAXzsKCglteSAkbGkgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAibGkiICk7
+CgkkdWwtPmFwcGVuZENoaWxkKCAkbGkgKTsKCiAgICAgICAgbXkgJGNoZWNrYm94ID0gJHJlcG8t
+Pm1ha2VfZWxlbWVudCggImlucHV0IiwgdHlwZSA9PiAiY2hlY2tib3giLCBpZCA9PiAkZmllbGRu
+YW1lLCBuYW1lID0+ICRmaWVsZG5hbWUsIHZhbHVlID0+ICRmaWVsZG5hbWUgKTsKCWlmKCBkZWZp
+bmVkICRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRfZGVm
+YXVsdHMiICkgKQoJewoJCWlmKCAoIGdyZXAgeyAkZmllbGRuYW1lIGVxICRfIH0gQHskcmVwby0+
+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX2RlZmF1bHRzIiApfSAp
+IHx8ICggc2NhbGFyKCBAeyRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhw
+b3J0ZmllbGRfZGVmYXVsdHMiICl9ICkgPT0gMCApICkKCQl7CgkJCSNvbmx5IGNoZWNrIGRlZmF1
+bHRzIG9yIGNoZWNrIGV2ZXJ5dGhpbmcgaWYgZGVmYXVsdHMgbm90IGRlZmluZWQKCQkJJGNoZWNr
+Ym94LT5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgInllcyIgKTsKCQl9Cgl9CglteSAkbGFiZWwg
+PSAkcmVwby0+bWFrZV9lbGVtZW50KCAibGFiZWwiLCBmb3IgPT4gJGZpZWxkbmFtZSApOwoJJGxh
+YmVsLT5hcHBlbmRDaGlsZCggJGZpZWxkbGFiZWwgKTsKCgkkbGktPmFwcGVuZENoaWxkKCAkY2hl
+Y2tib3ggKTsKCSRsaS0+YXBwZW5kQ2hpbGQoICRsYWJlbCApOwp9CgojIyMgdXRpbGl0eSBtZXRo
+b2RzCgojIFRPRE8gc2hvdWxkIHVzZSAiSlNPTiIgcGFja2FnZQpzdWIgdG9fanNvbgp7CiAgICAg
+ICAgbXkoICRzZWxmLCAkb2JqZWN0ICkgPSBAXzsKCglyZXR1cm4gIiIgaWYoICFkZWZpbmVkICRv
+YmplY3QgKTsKCiMgVVRGLTggaXNzdWVzOgojCXJldHVybiBKU09OLT5uZXctPnV0ZjgoMSktPmVu
+Y29kZSggJG9iamVjdCApOwoKICAgICAgICBpZiggcmVmKCAkb2JqZWN0ICkgZXEgJ0hBU0gnICkK
+ICAgICAgICB7CiAgICAgICAgICAgICAgICBteSBAc3R1ZmY7CiAgICAgICAgICAgICAgICB3aGls
+ZSggbXkoICRrLCAkdiApID0gZWFjaCggJSRvYmplY3QgKSApCiAgICAgICAgICAgICAgICB7CiAg
+ICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYoICFFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAk
+diApICk7ICAgICAgICMgb3IgJ251bGwnID8KICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBA
+c3R1ZmYsIEVQcmludHM6OlV0aWxzOjpqc19zdHJpbmcoICRrICkuJzonLiRzZWxmLT50b19qc29u
+KCAkdiApCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJ3snIC4gam9p
+biggIiwiLCBAc3R1ZmYgKSAuICd9JzsKICAgICAgICB9CiAgICAgICAgZWxzaWYoIHJlZiggJG9i
+amVjdCApIGVxICdBUlJBWScgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG15IEBzdHVmZjsK
+ICAgICAgICAgICAgICAgIGZvcmVhY2goIEAkb2JqZWN0ICkKICAgICAgICAgICAgICAgIHsKICAg
+ICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiggIUVQcmludHM6OlV0aWxzOjppc19zZXQoICRf
+ICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAc3R1ZmYsICRzZWxmLT50b19qc29u
+KCAkXyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICdbJyAuIGpv
+aW4oICIsIiwgQHN0dWZmICkgLiAnXSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gRVByaW50
+czo6VXRpbHM6OmpzX3N0cmluZyggJG9iamVjdCApOwp9CgpzdWIgZXhwb3J0X3BsdWdpbnMKewog
+ICAgICAgIG15KCAkc2VsZiwgJGdlbmVyaWMgKSA9IEBfOwoKCW15IEBwbHVnaW5faWRzOwoJCglt
+eSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCWlmKCBkZWZpbmVkICRyZXBvLT5jb25maWco
+ICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0X3BsdWdpbnMiICkgKQoJewoJCUBwbHVnaW5f
+aWRzID0gQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydF9wbHVn
+aW5zIiApfTsKCX0JCgllbHNpZiggJGdlbmVyaWMgKQoJewogCQlAcGx1Z2luX2lkcyA9ICRyZXBv
LT5wbHVnaW5fbGlzdCgKICAgICAgICAgICAgICAgIAl0eXBlID0+ICJFeHBvcnQiLAoJICAgICAg
-ICAgICAgICAgIGNhbl9hY2NlcHQgPT4gInJlcG9ydC8iLiRzZWxmLT5nZXRfcmVwb3J0LAogICAg
-ICAgIAkgICAgICAgIGlzX3Zpc2libGUgPT4gInN0YWZmIiwKCQkJaXNfYWR2ZXJ0aXNlZCA9PiAx
-LAoJICAgICAgICApOwogICAgICAgIH0KCW15IEBwbHVnaW5zOwoJZm9yZWFjaCBteSAkaWQgKCBA
-cGx1Z2luX2lkcyApCiAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJHAgPSAkc2VsZi0+cmVw
-b3NpdG9yeS0+cGx1Z2luKCAiJGlkIiApIG9yIG5leHQ7CiAgICAgICAgICAgICAgICBwdXNoIEBw
-bHVnaW5zLCAkcDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBAcGx1Z2luczsKfQoKc3ViIHJl
-cG9ydF9wbHVnaW5zCnsKCW15KCAkc2VsZiApID0gQF87CgoJIyBzZjIgLSBjYW4ndCBsaXN0IHZp
-YSB0eXBlID0+ICJTZWFyY2g6OlJlcG9ydCIgPyAKICAgICAgICBteSBAcGx1Z2luX2lkcyA9ICRz
-ZWxmLT5yZXBvc2l0b3J5LT5wbHVnaW5fbGlzdCgKICAgICAgICAgICAgICAgIHR5cGUgPT4gIlNj
-cmVlbiIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQHBsdWdpbnM7Cglmb3JlYWNoIG15ICRpZCAo
-IEBwbHVnaW5faWRzICkKICAgICAgICB7CgkJbmV4dCBpZiggJGlkICF+IC9eU2NyZWVuOjpSZXBv
-cnQ6Oi8gKTsJIyBub3RlIHRoaXMgYWxzbyBmaWx0ZXJzIG91dCAkc2VsZiAoYWthIFNjcmVlbjo6
-UmVwb3J0KQoKICAgICAgICAgICAgICAgIG15ICRwID0gJHNlbGYtPnJlcG9zaXRvcnktPnBsdWdp
-biggIiRpZCIgKTsKCQluZXh0IGlmKCAhZGVmaW5lZCAkcCB8fCAhJHAtPmNhbl9iZV92aWV3ZWQg
-KTsKCiAgICAgICAgICAgICAgICBwdXNoIEBwbHVnaW5zLCAkcDsKICAgICAgICB9CgogICAgICAg
-IHJldHVybiBAcGx1Z2luczsKfQoKI3JldHVybnMgYSBoYXNoIG9mIHZhbHVlcyBtYXBwZWQgdG8g
-YSBsYWJlbCBhbmQgYSBsaXN0CiNpZiBpZHNfb25seSBpcyBzZXQgdGhlIGxpc3Qgb2YgaXRlbXMg
-YXJlIGp1c3QgcmVwcmVzZW50ZWQgYnkgdGhlaXIgaWQgKHVzZWQgYnkgcmVwb3J0IEpTKQpzdWIg
-Z2V0X2dyb3VwZWRfaXRlbXMKewoJbXkoICRzZWxmLCAkaXRlbXMsICRpZHNfb25seSApID0gQF87
-CglteSAkc2Vzc2lvbiA9ICRzZWxmLT57c2Vzc2lvbn07CglteSAlZ3JvdXBlZDsKCglteSAkZ3Jv
-dXBpbmcgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH07CgoJbXkgJG1ldGFmaWVsZCA9ICRp
-dGVtcy0+Z2V0X2RhdGFzZXQtPmZpZWxkKCAkZ3JvdXBpbmcgKTsKCgkjc2V0IGdyb3VwX29wdHMg
-aWYgYXBwcm9wcmlhdGUKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29w
-dHN9ICkKCXsKCQlpZiggJG1ldGFmaWVsZC0+dHlwZSBlcSAiZGF0ZSIgKQoJCXsKCQkJJG1ldGFm
-aWVsZC0+e3JlbmRlcl9yZXN9ID0gJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30tPnty
-ZXN9IGlmIGV4aXN0cyAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3Jlc307CgkJ
-fQoJfQoKCSNjcmVhdGUgYSBoYXNoIG9mIGZpZWxkIHZhbHVlcyB0byBpdGVtcyAob3IgaXRlbSBp
-ZHMpCgkkaXRlbXMtPm1hcCggc3ViIHsKCSAgICAgICAJbXkoICRzZXNzaW9uLCAkZGF0YXNldCwg
-JGl0ZW0gKSA9IEBfOwoJCQoJCW15ICRtdWx0aXBsZSA9ICRtZXRhZmllbGQtPmdldF9wcm9wZXJ0
-eSggIm11bHRpcGxlIiApOwoJCW15IEBncm91cF92YWx1ZXM7CgkJaWYoICRtdWx0aXBsZSApCiAg
-ICAgICAgICAgICAgICB7CgkJCUBncm91cF92YWx1ZXMgPSBAeyRpdGVtLT52YWx1ZSggJGdyb3Vw
-aW5nICl9OwoJCX0KCQllbHNlCgkJewkJCQoJCQlAZ3JvdXBfdmFsdWVzID0gKCRpdGVtLT52YWx1
-ZSggJGdyb3VwaW5nICkpOwoJCX0KCQoJCWlmKCBzY2FsYXIgQGdyb3VwX3ZhbHVlcyA+IDAgKQoJ
-CXsKCQkJZm9yZWFjaCBteSAkZ3JvdXBfdmFsdWUgKCBAZ3JvdXBfdmFsdWVzICkKCQkJewoJCQkJ
-bXkgJGdyb3VwX2lkID0gJG1ldGFmaWVsZC0+Z2V0X2lkX2Zyb21fdmFsdWUoICRzZXNzaW9uLCAk
-Z3JvdXBfdmFsdWUgKTsKCQkJCSN0cnVuY2F0ZSBncm91cCBpZiBhcHByb3ByaWF0ZQoJCQkJaWYo
-IGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30gKQoJCQkJewoJCQkJCSRn
-cm91cF9pZCA9ICBzdWJzdHIoICJcdSRncm91cF9pZCIsIDAsICRzZWxmLT57cHJvY2Vzc29yfS0+
-e2dyb3VwX29wdHN9LT57dHJ1bmNhdGV9ICkgaWYgZXhpc3RzICRzZWxmLT57cHJvY2Vzc29yfS0+
-e2dyb3VwX29wdHN9LT57dHJ1bmNhdGV9OwoJCQkJfQoKCQkgICAgICAgIAlpZiggZXhpc3RzICRn
-cm91cGVkeyRncm91cF9pZH0gKSAjd2UndmUgYWxyZWFkeSBzZXQgdGhpcyBsaXN0IHVwLCBwdXNo
-IGEgbmV3IGl0ZW0gb24gdG8gdGhlIGxpc3QKCQkgICAgICAgICAgICAgICAJewoJCQkJCWlmKCAk
-aWRzX29ubHkgKSAjc29tZXRpbWVzIHdlIG9ubHkgd2FudCBpZHMgcmF0aGVyIHRoYW4gdGhlIHdo
-b2xlIGl0ZW0KCQkJCQl7CgkJCQkJCXB1c2ggQHskZ3JvdXBlZHskZ3JvdXBfaWR9fSwgJGl0ZW0t
-PmlkOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlwdXNoIEB7JGdyb3VwZWR7JGdyb3Vw
-X2lkfX0sICRpdGVtOwoJCQkJCX0KCSAgICAgICAJCSAgICAgICAgfQogICAgICAgIAkgICAgICAJ
-CWVsc2UgI3NldCB1cCBhIGxpc3QgZm9yIHRoaXMgZ3JvdXAKCSAgICAgICAgCSAgICAgICAJewoJ
-CQkJCW15IEBncm91cGVkX2l0ZW1zOwoJCQkJCWlmKCAkaWRzX29ubHkgKSAjc29tZXRpbWVzIHdl
-IG9ubHkgd2FudCBpZHMgcmF0aGVyIHRoYW4gdGhlIHdob2xlIGl0ZW0KCQkgICAgICAgICAgICAg
-ICAgICAgICAgICB7CQogICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAgICAgQGdyb3VwZWRf
-aXRlbXMgPSAoJGl0ZW0tPmlkKTsKICAgICAgICAgICAgICAgIAkJICAgICAgICB9CgkgICAgICAg
-ICAgICAgICAgCSAgICAgICAgZWxzZQogICAgICAgIAkgICAgICAgICAgICAgICAgCXsKCSAgICAg
-ICAgICAgICAgICAJICAgICAgICAgICAgICAgIEBncm91cGVkX2l0ZW1zID0gKCRpdGVtKTsKICAg
-ICAgICAJCSAgICAgICAgICAgICAgIAl9CgkgICAgICAgICAgICAgICAgCSAgICAgICAgJGdyb3Vw
-ZWR7JGdyb3VwX2lkfSA9IFtAZ3JvdXBlZF9pdGVtc107CgkJCQl9CiAgICAgICAgICAgICAgIAkJ
-fQoJCX0KCQllbHNlCgkJewoJCQlteSAkZ3JvdXBfaWQgPSAiVW5zcGVjaWZpZWQgIiAuICRtZXRh
-ZmllbGQtPm5hbWU7CiAgCSAgICAJCWlmKCBleGlzdHMgJGdyb3VwZWR7JGdyb3VwX2lkfSApICN3
-ZSd2ZSBhbHJlYWR5IHNldCB0aGlzIGxpc3QgdXAsIHB1c2ggYSBuZXcgaXRlbSBvbiB0byB0aGUg
-bGlzdAoJCSAgCXsKCQkJCWlmKCAkaWRzX29ubHkgKSAjc29tZXRpbWVzIHdlIG9ubHkgd2FudCBp
-ZHMgcmF0aGVyIHRoYW4gdGhlIHdob2xlIGl0ZW0KCQkJCXsKCQkJCQlwdXNoIEB7JGdyb3VwZWR7
-JGdyb3VwX2lkfX0sICRpdGVtLT5pZDsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoIEB7
-JGdyb3VwZWR7JGdyb3VwX2lkfX0sICRpdGVtOwoJCQkJfQoJICAgICAgIAkJfQogICAgICAgIAkg
-ICAgICAJZWxzZSAjc2V0IHVwIGEgbGlzdCBmb3IgdGhpcyBncm91cAoJICAgICAgICAJewoJCQkJ
-bXkgQGdyb3VwZWRfaXRlbXM7CgkJCQlpZiggJGlkc19vbmx5ICkgI3NvbWV0aW1lcyB3ZSBvbmx5
-IHdhbnQgaWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBpdGVtCgkJICAgICAgICAgICAgICAgIHsJ
-CiAgICAgICAgCQkJCUBncm91cGVkX2l0ZW1zID0gKCRpdGVtLT5pZCk7CiAgICAgICAgICAgICAg
-ICAJCX0KCSAgICAgICAgICAgICAgICAJZWxzZQogICAgICAgIAkgICAgICAgICAgICAgICAgewoJ
-ICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICBAZ3JvdXBlZF9pdGVtcyA9ICgkaXRlbSk7
-CiAgICAgICAgCSAgICAgICAgICAgICAgIAl9CgkgICAgICAgICAgICAgIAkgICAgICAgICRncm91
-cGVkeyRncm91cF9pZH0gPSBbQGdyb3VwZWRfaXRlbXNdOwoJCQl9CgkJfQogICAgICAgCX0gKTsK
-Cgkjbm93IHNvcnQgdGhlIGdyb3VwcyBhbmQgYWRkIGh1bWFuIHJlYWRhYmxlIGxhYmVscwoJbXkg
-QHNvcnRlZF9ncm91cHM7CgkKCW15ICRyZXZlcnNlID0gMDsKCSRyZXZlcnNlID0gJHNlbGYtPntw
-cm9jZXNzb3J9LT57Z3JvdXBfb3B0c30tPntyZXZlcnNlX29yZGVyfSBpZiBleGlzdHMgJHNlbGYt
-Pntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30tPntyZXZlcnNlX29yZGVyfTsKCWlmKCAkbWV0YWZp
-ZWxkLT50eXBlIGVxICJuYW1lZHNldCIgKQoJewoJCW15KCAkdGFncywgJGxhYmVscyApID0gJG1l
-dGFmaWVsZC0+dGFnc19hbmRfbGFiZWxzKCAkc2Vzc2lvbiApOwoJCSNjb252ZXJ0IHRhZ3MgdG8g
-YSBoYXNoIG9mIHZhbHVlcyBhbmQgYSBwcmlvcml0eSAoZm9yIG9yZGVyaW5nKQoJCW15ICVwcmlv
-cml0eTsKCQlteSAkaW5kZXggPSAxOwoJCWZvcmVhY2ggbXkgJHRhZyAoQHskdGFnc30gKQoJCXsK
-CQkJJHByaW9yaXR5eyR0YWd9ID0gJGluZGV4OwoJCQkkaW5kZXgrKzsKCQl9CgkJZm9yZWFjaCBt
-eSAka2V5IChzb3J0IHskcHJpb3JpdHl7JGF9IDw9PiAkcHJpb3JpdHl7JGJ9fSBrZXlzICVncm91
-cGVkKQogICAgICAgIAl7CgkJCXB1c2ggQHNvcnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9ncm91
-cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAkbGFiZWxzLT57JGtleX0gKTsKCQl9Cgl9CgllbHNp
-ZiggJG1ldGFmaWVsZC0+dHlwZSBlcSAic3ViamVjdCIgKQoJewkJCgkJbXkgJGRzID0gJHNlc3Np
-b24tPmRhdGFzZXQoICJzdWJqZWN0IiApOwoJCW15IEB2YWx1ZXMgPSBrZXlzICVncm91cGVkOwoJ
-CW15ICRzb3J0ZWQgPSAkbWV0YWZpZWxkLT5zb3J0X3ZhbHVlcyggJHNlc3Npb24sIFxAdmFsdWVz
-ICk7CgkJbXkgJXByaW9yaXR5OwoJCW15ICRpbmRleCA9IDE7CiAgICAgICAgICAgICAgICBmb3Jl
-YWNoIG15ICR2YWx1ZSAoQHskc29ydGVkfSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
-ICAgICAgICAgICAgICRwcmlvcml0eXskdmFsdWV9ID0gJGluZGV4OwogICAgICAgICAgICAgICAg
-ICAgICAgICAkaW5kZXgrKzsKICAgICAgICAgICAgICAgIH0KCQlmb3JlYWNoIG15ICRrZXkgKHNv
-cnQgeyRwcmlvcml0eXskYX0gPD0+ICRwcmlvcml0eXskYn19IGtleXMgJWdyb3VwZWQpCiAgICAg
-ICAgICAgICAgICB7CgkJCW15ICRzdWJqID0gJGRzLT5kYXRhb2JqKCAka2V5ICk7CiAgICAgICAg
-ICAgICAgICAgICAgICAgIHB1c2ggQHNvcnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9ncm91cGVk
-X2l0ZW0oICRncm91cGVkeyRrZXl9LCBFUHJpbnRzOjpVdGlsczo6dHJlZV90b191dGY4KCAkc3Vi
-ai0+cmVuZGVyX2Rlc2NyaXB0aW9uICkgKSBpZiBkZWZpbmVkICRzdWJqOwogICAgICAgICAgICAg
-ICAgfQoJfQoJZWxzaWYoICRtZXRhZmllbGQtPnR5cGUgZXEgImRhdGUiICkKCXsKCQlpZiggJHJl
-dmVyc2UgKQoJCXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCB7JGIgPD0+ICRhfSBrZXlzICVn
-cm91cGVkICkKCQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3Vw
-ZWRfaXRlbSggJGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlm
-b3JlYWNoIG15ICRrZXkgKCBzb3J0IHskYSA8PT4gJGJ9IGtleXMgJWdyb3VwZWQgKQoJCQl7CgkJ
-CQlwdXNoIEBzb3J0ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBl
-ZHska2V5fSwgJGtleSApOwoJCQl9CgkJfQoJfQoJZWxzZQoJewkKCQlpZiggJHJldmVyc2UgKQoJ
-CXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCB7JGIgY21wICRhfSBrZXlzICVncm91cGVkICkK
-CQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRlbSgg
-JGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlmb3JlYWNoIG15
-ICRrZXkgKCBzb3J0IGtleXMgJWdyb3VwZWQgKQoJCQl7CgkJCQlwdXNoIEBzb3J0ZWRfZ3JvdXBz
-LCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwgJGtleSApOwoJCQl9
-CgkJfQoJfQoKCSNjaGVjayBmb3IgYW55IHVuc3BlY2lmaWVkIGdyb3VwcwoJbXkgJGdyb3VwX2lk
-ID0gIlVuc3BlY2lmaWVkICIgLiAkbWV0YWZpZWxkLT5uYW1lOwoJaWYoIGV4aXN0cyAkZ3JvdXBl
-ZHskZ3JvdXBfaWR9ICkKCXsKCQlwdXNoIEBzb3J0ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3Jv
-dXBlZF9pdGVtKCAkZ3JvdXBlZHskZ3JvdXBfaWR9LCAkZ3JvdXBfaWQgKTsKCX0KCglyZXR1cm4g
-XEBzb3J0ZWRfZ3JvdXBzOwp9CQoKCnN1YiBfbWFrZV9ncm91cGVkX2l0ZW0KewoJbXkoICRzZWxm
-LCAkbGlzdCwgJGxhYmVsICkgPSBAXzsKCW15ICVncm91cDsKCSRncm91cHtsaXN0fSA9ICRsaXN0
-OwoJJGdyb3Vwe2xhYmVsfSA9ICRsYWJlbDsKCXJldHVybiBcJWdyb3VwOwp9CgoxOwo=
+ICAgICAgICAgIGNhbl9hY2NlcHQgPT4gInJlcG9ydC9nZW5lcmljIiwKICAgICAgICAJICAgICAg
+ICBpc192aXNpYmxlID0+ICJzdGFmZiIsCgkJCWlzX2FkdmVydGlzZWQgPT4gMSwKCSAgICAgICAg
+KTsKCX0KCWVsc2UKCXsKICAgICAgICAJQHBsdWdpbl9pZHMgPSAkcmVwby0+cGx1Z2luX2xpc3Qo
+CiAgICAgICAgICAgICAgICAJdHlwZSA9PiAiRXhwb3J0IiwKCSAgICAgICAgICAgICAgICBjYW5f
+YWNjZXB0ID0+ICJyZXBvcnQvIi4kc2VsZi0+Z2V0X3JlcG9ydCwKICAgICAgICAJICAgICAgICBp
+c192aXNpYmxlID0+ICJzdGFmZiIsCgkJCWlzX2FkdmVydGlzZWQgPT4gMSwKCSAgICAgICAgKTsK
+ICAgICAgICB9CglteSBAcGx1Z2luczsKCWZvcmVhY2ggbXkgJGlkICggQHBsdWdpbl9pZHMgKQog
+ICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRwID0gJHJlcG8tPnBsdWdpbiggIiRpZCIgKSBv
+ciBuZXh0OwogICAgICAgICAgICAgICAgcHVzaCBAcGx1Z2lucywgJHA7CiAgICAgICAgfQoKICAg
+ICAgICByZXR1cm4gQHBsdWdpbnM7Cn0KCnN1YiByZXBvcnRfcGx1Z2lucwp7CglteSggJHNlbGYg
+KSA9IEBfOwoKCSMgc2YyIC0gY2FuJ3QgbGlzdCB2aWEgdHlwZSA9PiAiU2VhcmNoOjpSZXBvcnQi
+ID8gCiAgICAgICAgbXkgQHBsdWdpbl9pZHMgPSAkc2VsZi0+cmVwb3NpdG9yeS0+cGx1Z2luX2xp
+c3QoCiAgICAgICAgICAgICAgICB0eXBlID0+ICJTY3JlZW4iLAogICAgICAgICk7CgogICAgICAg
+IG15IEBwbHVnaW5zOwoJZm9yZWFjaCBteSAkaWQgKCBAcGx1Z2luX2lkcyApCiAgICAgICAgewoJ
+CW5leHQgaWYoICRpZCAhfiAvXlNjcmVlbjo6UmVwb3J0OjovICk7CSMgbm90ZSB0aGlzIGFsc28g
+ZmlsdGVycyBvdXQgJHNlbGYgKGFrYSBTY3JlZW46OlJlcG9ydCkKCiAgICAgICAgICAgICAgICBt
+eSAkcCA9ICRzZWxmLT5yZXBvc2l0b3J5LT5wbHVnaW4oICIkaWQiICk7CgkJbmV4dCBpZiggIWRl
+ZmluZWQgJHAgfHwgISRwLT5jYW5fYmVfdmlld2VkICk7CgogICAgICAgICAgICAgICAgcHVzaCBA
+cGx1Z2lucywgJHA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gQHBsdWdpbnM7Cn0KCiNyZXR1
+cm5zIGEgaGFzaCBvZiB2YWx1ZXMgbWFwcGVkIHRvIGEgbGFiZWwgYW5kIGEgbGlzdAojaWYgaWRz
+X29ubHkgaXMgc2V0IHRoZSBsaXN0IG9mIGl0ZW1zIGFyZSBqdXN0IHJlcHJlc2VudGVkIGJ5IHRo
+ZWlyIGlkICh1c2VkIGJ5IHJlcG9ydCBKUykKc3ViIGdldF9ncm91cGVkX2l0ZW1zCnsKCW15KCAk
+c2VsZiwgJGl0ZW1zLCAkaWRzX29ubHkgKSA9IEBfOwoJbXkgJHNlc3Npb24gPSAkc2VsZi0+e3Nl
+c3Npb259OwoJbXkgJWdyb3VwZWQ7CgoJbXkgJGdyb3VwaW5nID0gJHNlbGYtPntwcm9jZXNzb3J9
+LT57Z3JvdXB9OwoKCW15ICRtZXRhZmllbGQgPSAkaXRlbXMtPmdldF9kYXRhc2V0LT5maWVsZCgg
+JGdyb3VwaW5nICk7CgoJI3NldCBncm91cF9vcHRzIGlmIGFwcHJvcHJpYXRlCglpZiggZGVmaW5l
+ZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfSApCgl7CgkJaWYoICRtZXRhZmllbGQt
+PnR5cGUgZXEgImRhdGUiICkKCQl7CgkJCSRtZXRhZmllbGQtPntyZW5kZXJfcmVzfSA9ICRzZWxm
+LT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9LT57cmVzfSBpZiBleGlzdHMgJHNlbGYtPntwcm9j
+ZXNzb3J9LT57Z3JvdXBfb3B0c30tPntyZXN9OwoJCX0KCX0KCgkjY3JlYXRlIGEgaGFzaCBvZiBm
+aWVsZCB2YWx1ZXMgdG8gaXRlbXMgKG9yIGl0ZW0gaWRzKQoJJGl0ZW1zLT5tYXAoIHN1YiB7Cgkg
+ICAgICAgCW15KCAkc2Vzc2lvbiwgJGRhdGFzZXQsICRpdGVtICkgPSBAXzsKCQkKCQlteSAkbXVs
+dGlwbGUgPSAkbWV0YWZpZWxkLT5nZXRfcHJvcGVydHkoICJtdWx0aXBsZSIgKTsKCQlteSBAZ3Jv
+dXBfdmFsdWVzOwoJCWlmKCAkbXVsdGlwbGUgKQogICAgICAgICAgICAgICAgewoJCQlAZ3JvdXBf
+dmFsdWVzID0gQHskaXRlbS0+dmFsdWUoICRncm91cGluZyApfTsKCQl9CgkJZWxzZQoJCXsJCQkK
+CQkJQGdyb3VwX3ZhbHVlcyA9ICgkaXRlbS0+dmFsdWUoICRncm91cGluZyApKTsKCQl9CgkKCQlp
+Ziggc2NhbGFyIEBncm91cF92YWx1ZXMgPiAwICkKCQl7CgkJCWZvcmVhY2ggbXkgJGdyb3VwX3Zh
+bHVlICggQGdyb3VwX3ZhbHVlcyApCgkJCXsKCQkJCW15ICRncm91cF9pZCA9ICRtZXRhZmllbGQt
+PmdldF9pZF9mcm9tX3ZhbHVlKCAkc2Vzc2lvbiwgJGdyb3VwX3ZhbHVlICk7CgkJCQkjdHJ1bmNh
+dGUgZ3JvdXAgaWYgYXBwcm9wcmlhdGUKCQkJCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29y
+fS0+e2dyb3VwX29wdHN9ICkKCQkJCXsKCQkJCQkkZ3JvdXBfaWQgPSAgc3Vic3RyKCAiXHUkZ3Jv
+dXBfaWQiLCAwLCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3RydW5jYXRlfSAp
+IGlmIGV4aXN0cyAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3RydW5jYXRlfTsK
+CQkJCX0KCgkJICAgICAgICAJaWYoIGV4aXN0cyAkZ3JvdXBlZHskZ3JvdXBfaWR9ICkgI3dlJ3Zl
+IGFscmVhZHkgc2V0IHRoaXMgbGlzdCB1cCwgcHVzaCBhIG5ldyBpdGVtIG9uIHRvIHRoZSBsaXN0
+CgkJICAgICAgICAgICAgICAgCXsKCQkJCQlpZiggJGlkc19vbmx5ICkgI3NvbWV0aW1lcyB3ZSBv
+bmx5IHdhbnQgaWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBpdGVtCgkJCQkJewoJCQkJCQlwdXNo
+IEB7JGdyb3VwZWR7JGdyb3VwX2lkfX0sICRpdGVtLT5pZDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJ
+CXsKCQkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRlbTsKCQkJCQl9CgkgICAg
+ICAgCQkgICAgICAgIH0KICAgICAgICAJICAgICAgCQllbHNlICNzZXQgdXAgYSBsaXN0IGZvciB0
+aGlzIGdyb3VwCgkgICAgICAgIAkgICAgICAgCXsKCQkJCQlteSBAZ3JvdXBlZF9pdGVtczsKCQkJ
+CQlpZiggJGlkc19vbmx5ICkgI3NvbWV0aW1lcyB3ZSBvbmx5IHdhbnQgaWRzIHJhdGhlciB0aGFu
+IHRoZSB3aG9sZSBpdGVtCgkJICAgICAgICAgICAgICAgICAgICAgICAgewkKICAgICAgICAJCSAg
+ICAgICAgICAgICAgICAgICAgICAgIEBncm91cGVkX2l0ZW1zID0gKCRpdGVtLT5pZCk7CiAgICAg
+ICAgICAgICAgICAJCSAgICAgICAgfQoJICAgICAgICAgICAgICAgIAkgICAgICAgIGVsc2UKICAg
+ICAgICAJICAgICAgICAgICAgICAgIAl7CgkgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAg
+ICBAZ3JvdXBlZF9pdGVtcyA9ICgkaXRlbSk7CiAgICAgICAgCQkgICAgICAgICAgICAgICAJfQoJ
+ICAgICAgICAgICAgICAgIAkgICAgICAgICRncm91cGVkeyRncm91cF9pZH0gPSBbQGdyb3VwZWRf
+aXRlbXNdOwoJCQkJfQogICAgICAgICAgICAgICAJCX0KCQl9CgkJZWxzZQoJCXsKCQkJbXkgJGdy
+b3VwX2lkID0gIlVuc3BlY2lmaWVkICIgLiAkbWV0YWZpZWxkLT5uYW1lOwogIAkgICAgCQlpZigg
+ZXhpc3RzICRncm91cGVkeyRncm91cF9pZH0gKSAjd2UndmUgYWxyZWFkeSBzZXQgdGhpcyBsaXN0
+IHVwLCBwdXNoIGEgbmV3IGl0ZW0gb24gdG8gdGhlIGxpc3QKCQkgIAl7CgkJCQlpZiggJGlkc19v
+bmx5ICkgI3NvbWV0aW1lcyB3ZSBvbmx5IHdhbnQgaWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBp
+dGVtCgkJCQl7CgkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRlbS0+aWQ7CgkJ
+CQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRl
+bTsKCQkJCX0KCSAgICAgICAJCX0KICAgICAgICAJICAgICAgCWVsc2UgI3NldCB1cCBhIGxpc3Qg
+Zm9yIHRoaXMgZ3JvdXAKCSAgICAgICAgCXsKCQkJCW15IEBncm91cGVkX2l0ZW1zOwoJCQkJaWYo
+ICRpZHNfb25seSApICNzb21ldGltZXMgd2Ugb25seSB3YW50IGlkcyByYXRoZXIgdGhhbiB0aGUg
+d2hvbGUgaXRlbQoJCSAgICAgICAgICAgICAgICB7CQogICAgICAgIAkJCQlAZ3JvdXBlZF9pdGVt
+cyA9ICgkaXRlbS0+aWQpOwogICAgICAgICAgICAgICAgCQl9CgkgICAgICAgICAgICAgICAgCWVs
+c2UKICAgICAgICAJICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgIAkgICAgICAgICAg
+ICAgICAgQGdyb3VwZWRfaXRlbXMgPSAoJGl0ZW0pOwogICAgICAgIAkgICAgICAgICAgICAgICAJ
+fQoJICAgICAgICAgICAgICAJICAgICAgICAkZ3JvdXBlZHskZ3JvdXBfaWR9ID0gW0Bncm91cGVk
+X2l0ZW1zXTsKCQkJfQoJCX0KICAgICAgIAl9ICk7CgoJI25vdyBzb3J0IHRoZSBncm91cHMgYW5k
+IGFkZCBodW1hbiByZWFkYWJsZSBsYWJlbHMKCW15IEBzb3J0ZWRfZ3JvdXBzOwoJCglteSAkcmV2
+ZXJzZSA9IDA7CgkkcmV2ZXJzZSA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9LT57
+cmV2ZXJzZV9vcmRlcn0gaWYgZXhpc3RzICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9
+LT57cmV2ZXJzZV9vcmRlcn07CglpZiggJG1ldGFmaWVsZC0+dHlwZSBlcSAibmFtZWRzZXQiICkK
+CXsKCQlteSggJHRhZ3MsICRsYWJlbHMgKSA9ICRtZXRhZmllbGQtPnRhZ3NfYW5kX2xhYmVscygg
+JHNlc3Npb24gKTsKCQkjY29udmVydCB0YWdzIHRvIGEgaGFzaCBvZiB2YWx1ZXMgYW5kIGEgcHJp
+b3JpdHkgKGZvciBvcmRlcmluZykKCQlteSAlcHJpb3JpdHk7CgkJbXkgJGluZGV4ID0gMTsKCQlm
+b3JlYWNoIG15ICR0YWcgKEB7JHRhZ3N9ICkKCQl7CgkJCSRwcmlvcml0eXskdGFnfSA9ICRpbmRl
+eDsKCQkJJGluZGV4Kys7CgkJfQoJCWZvcmVhY2ggbXkgJGtleSAoc29ydCB7JHByaW9yaXR5eyRh
+fSA8PT4gJHByaW9yaXR5eyRifX0ga2V5cyAlZ3JvdXBlZCkKICAgICAgICAJewoJCQlwdXNoIEBz
+b3J0ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwg
+JGxhYmVscy0+eyRrZXl9ICk7CgkJfQoJfQoJZWxzaWYoICRtZXRhZmllbGQtPnR5cGUgZXEgInN1
+YmplY3QiICkKCXsJCQoJCW15ICRkcyA9ICRzZXNzaW9uLT5kYXRhc2V0KCAic3ViamVjdCIgKTsK
+CQlteSBAdmFsdWVzID0ga2V5cyAlZ3JvdXBlZDsKCQlteSAkc29ydGVkID0gJG1ldGFmaWVsZC0+
+c29ydF92YWx1ZXMoICRzZXNzaW9uLCBcQHZhbHVlcyApOwoJCW15ICVwcmlvcml0eTsKCQlteSAk
+aW5kZXggPSAxOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JHNvcnRlZH0g
+KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJpb3JpdHl7JHZh
+bHVlfSA9ICRpbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgJGluZGV4Kys7CiAgICAgICAg
+ICAgICAgICB9CgkJZm9yZWFjaCBteSAka2V5IChzb3J0IHskcHJpb3JpdHl7JGF9IDw9PiAkcHJp
+b3JpdHl7JGJ9fSBrZXlzICVncm91cGVkKQogICAgICAgICAgICAgICAgewoJCQlteSAkc3ViaiA9
+ICRkcy0+ZGF0YW9iaiggJGtleSApOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBzb3J0
+ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwgRVBy
+aW50czo6VXRpbHM6OnRyZWVfdG9fdXRmOCggJHN1YmotPnJlbmRlcl9kZXNjcmlwdGlvbiApICkg
+aWYgZGVmaW5lZCAkc3ViajsKICAgICAgICAgICAgICAgIH0KCX0KCWVsc2lmKCAkbWV0YWZpZWxk
+LT50eXBlIGVxICJkYXRlIiApCgl7CgkJaWYoICRyZXZlcnNlICkKCQl7CgkJCWZvcmVhY2ggbXkg
+JGtleSAoIHNvcnQgeyRiIDw9PiAkYX0ga2V5cyAlZ3JvdXBlZCApCgkJCXsKCQkJCXB1c2ggQHNv
+cnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAk
+a2V5ICk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCB7JGEg
+PD0+ICRifSBrZXlzICVncm91cGVkICkKCQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNl
+bGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0K
+CX0KCWVsc2UKCXsJCgkJaWYoICRyZXZlcnNlICkKCQl7CgkJCWZvcmVhY2ggbXkgJGtleSAoIHNv
+cnQgeyRiIGNtcCAkYX0ga2V5cyAlZ3JvdXBlZCApCgkJCXsKCQkJCXB1c2ggQHNvcnRlZF9ncm91
+cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAka2V5ICk7CgkJ
+CX0KCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCBrZXlzICVncm91cGVk
+ICkKCQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRl
+bSggJGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0KCX0KCgkjY2hlY2sgZm9yIGFueSB1
+bnNwZWNpZmllZCBncm91cHMKCW15ICRncm91cF9pZCA9ICJVbnNwZWNpZmllZCAiIC4gJG1ldGFm
+aWVsZC0+bmFtZTsKCWlmKCBleGlzdHMgJGdyb3VwZWR7JGdyb3VwX2lkfSApCgl7CgkJcHVzaCBA
+c29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGdyb3Vw
+X2lkfSwgJGdyb3VwX2lkICk7Cgl9CgoJcmV0dXJuIFxAc29ydGVkX2dyb3VwczsKfQkKCgpzdWIg
+X21ha2VfZ3JvdXBlZF9pdGVtCnsKCW15KCAkc2VsZiwgJGxpc3QsICRsYWJlbCApID0gQF87Cglt
+eSAlZ3JvdXA7CgkkZ3JvdXB7bGlzdH0gPSAkbGlzdDsKCSRncm91cHtsYWJlbH0gPSAkbGFiZWw7
+CglyZXR1cm4gXCVncm91cDsKfQoKc3ViIHJlbmRlcl9zZWxlY3RhbGwKewoJbXkoICRzZWxmLCAk
+eG1sICkgPSBAXzsKCglteSAkdG9nZ2xlX2Z1bmN0aW9uID0gJwoJCXZhciBpc0NoZWNrZWQgPSB0
+cnVlOwoJCWZ1bmN0aW9uIHRvZ2dsZUNoZWNrYm94ZXMoKSB7CgkgICAgICAgIAl2YXIgZXhwb3J0
+X29wdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJyZXBvcnRfZXhwb3J0
+X29wdGlvbnMiKTsKCQkJZm9yKCBleHBvcnRfb3B0aW9uIG9mIGV4cG9ydF9vcHRpb25zICkKCQkJ
+ewoJCQkJdmFyIGNoZWNrYm94ZXMgPSBleHBvcnRfb3B0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1l
+KCAiaW5wdXQiICkKCQkJCWZvciggY2hlY2tib3ggb2YgY2hlY2tib3hlcyApCgkJCQl7CgkJCQkJ
+aWYoaXNDaGVja2VkKQoJCQkJCXsKCSAgICAgICAgICAgICAgICAJCQljaGVja2JveC5jaGVja2Vk
+ID0gIiI7CgkJICAJICAgICAgICAJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkgICAgICAgICAgICAg
+ICAgY2hlY2tib3guY2hlY2tlZCA9ICJjaGVja2VkIjsKCQkJCQl9CgkgICAgICAgICAJCX0KCQkJ
+fQoJCQlpc0NoZWNrZWQgPSAhaXNDaGVja2VkOwoJCX0nOwoJCglteSAkanNfdGFnID0gJHhtbC0+
+Y3JlYXRlX2VsZW1lbnQoICJzY3JpcHQiICk7CgkkanNfdGFnLT5hcHBlbmRDaGlsZCggJHhtbC0+
+Y3JlYXRlX3RleHRfbm9kZSggJHRvZ2dsZV9mdW5jdGlvbiApICk7CglyZXR1cm4gJGpzX3RhZzsK
+fQoKc3ViIHJlbmRlcl9jbGVhcmZvcm0KewoJbXkoICRzZWxmLCAkeG1sICkgPSBAXzsKCglteSAk
+Y2xlYXJfZnVuY3Rpb24gPSAnCgkJZnVuY3Rpb24gY2xlYXJGb3JtKCl7CgkJCXZhciByZXBvcnQg
+PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImN1c3RvbV9yZXBvcnQiICk7CgkJCXZhciBmb3Jt
+ID0gcmVwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInNlbGVjdGVkX2Zvcm0iKVswXTsKCQkJ
+dmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJpbnB1dCIgKTsKCQkJZm9y
+KCBpbnB1dCBvZiBpbnB1dHMgKQoJCQl7CgkJCQlmaWVsZF90eXBlID0gaW5wdXQudHlwZS50b0xv
+d2VyQ2FzZSgpOwkKCQkJCWNvbnNvbGUubG9nKGZpZWxkX3R5cGUpOwoJCQkJc3dpdGNoIChmaWVs
+ZF90eXBlKQoJCQkJewoJCQkJY2FzZSAidGV4dCI6CgkJCQljYXNlICJ0ZXh0YXJlYSI6CgkJCQkJ
+aW5wdXQudmFsdWUgPSAiIjsKCQkJCQlicmVhazsKCQkJCWNhc2UgInJhZGlvIjoKCQkJCWNhc2Ug
+ImNoZWNrYm94IjoKCQkJCQlpZiAoaW5wdXQuY2hlY2tlZCkKCQkJCQl7CiAgICAgICAgCQkJCQlp
+bnB1dC5jaGVja2VkID0gZmFsc2U7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAic2VsZWN0
+LW9uZSI6CgkJCQljYXNlICJzZWxlY3QtbXVsdGkiOgoJCQkJCWlucHV0LnNlbGVjdGVkSW5kZXgg
+PSAtMTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0JCgkJ
+ICAgICAgICB2YXIgc2VsZWN0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzZWxlY3Qi
+ICk7CgkJCWZvciggc2VsZWN0IG9mIHNlbGVjdHMgKQoJCQl7CQoJCQkJaWYoIHNlbGVjdC5oYXNB
+dHRyaWJ1dGUoIm11bHRpcGxlIikgKQoJCQkJewoJCQkJCXNlbGVjdC5zZWxlY3RlZEluZGV4ID0g
+LTE7CgkJCQl9CgkJCX0JCQoKCQl9JzsJCQoKCW15ICRqc190YWcgPSAkeG1sLT5jcmVhdGVfZWxl
+bWVudCggInNjcmlwdCIgKTsKICAgICAgICAkanNfdGFnLT5hcHBlbmRDaGlsZCggJHhtbC0+Y3Jl
+YXRlX3RleHRfbm9kZSggJGNsZWFyX2Z1bmN0aW9uICkgKTsKICAgICAgICByZXR1cm4gJGpzX3Rh
+ZzsKfQoKMTsK
@@ -2003,9 +2142,9 @@ mCeqVAAAAABJRU5ErkJggg==
static/javascript/auto/reports.js
text/plain
- 433f2b10185e875b322d0566e4d787c8
+ d02c8742a8d57f71e94e1c62635b94de
MD5
- 12566
+ 12701
dmFyIGluaXRSZXBvcnRGb3JtID0gZnVuY3Rpb24oKXsKCiAgICAgICAgLy9wb2x5ZmlsbCBmb3Ig
SUUKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygd2lu
ZG93LkN1c3RvbUV2ZW50ID09PSAiZnVuY3Rpb24iICkgcmV0dXJuIGZhbHNlOyAvL0lmIG5vdCBJ
@@ -2027,214 +2166,216 @@ ICAgIH0pOwp9OwoKCnZhciBvbkZvcm1TZWxlY3QgPSBmdW5jdGlvbigpewoJLy9nZXQgZm9ybSBp
ZAoJdmFyIGZvcm1pZCA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLmdldEF0dHJp
YnV0ZSgnZm9ybScpOwoJCgkvL2hpZGUgb3RoZXIgZm9ybXMKCSQkKCd0YWJsZS5lcF9zZWFyY2hf
ZmllbGRzJykuZWFjaChmdW5jdGlvbiAoZWxlbSkgCgl7CQoJCS8vaGlkZSB0aGUgZm9ybQoJCSQo
-ZWxlbSkuaGlkZSgpOwoKCQkkKGVsZW0pLnNlbGVjdCgnaW5wdXQnKS5lYWNoKGZ1bmN0aW9uIChp
-bnB1dCkKCQl7CgkJCSQoaW5wdXQpLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCAiZGlzYWJsZWQi
-KTsKCQl9KTsKCX0pOwoJCQoJLy9zaG93IHRoZSBmb3JtIHdlIHdhbnQKCSQoZm9ybWlkKS5zaG93
-KCk7CgoJLy9lbmFibGUgdGhpcyBmb3JtJ3MgaW5wdXQgZWxlbWVudHMKCSQoZm9ybWlkKS5zZWxl
-Y3QoJ2lucHV0JykuZWFjaChmdW5jdGlvbiAoaW5wdXQpCgl7CgkJJChpbnB1dCkucmVtb3ZlQXR0
-cmlidXRlKCJkaXNhYmxlZCIpOwoJfSk7Cgp9OwoKLy8gVXNlZCBieSB0aGUgU2NyZWVuOjpSZXBv
-cnQ6OnJlbmRlciBtZXRob2QKCnZhciBFUHJpbnRzX1NjcmVlbl9SZXBvcnRfTG9hZGVyID0gQ2xh
-c3MuY3JlYXRlKHsKCWhhc19wcm9ibGVtczogMCwKCWNvdW50OiAwLAoJcnVuczogMCwKCXByb2dy
-ZXNzOiBudWxsLAoJaWRzOiBBcnJheSgpLAoJc3RlcDogMjAsCglwcmVmaXg6ICcnLAoJb25Qcm9i
-bGVtczogZnVuY3Rpb24oKSB7fSwKCW9uRmluaXNoOiBmdW5jdGlvbigpIHt9LAoJdXJsOiAiIiwK
-CXBhcmFtZXRlcnM6ICIiLAoJY29udGFpbmVyOiBudWxsLAoJc2hvd19jb21wbGlhbmNlOiAxLAkK
-CgkvLyB0byBzaG93IGEgcHJldHR5IHByb2dyZXNzIGJhciAoJSBjb21wbGlhbmNlKToKCXRvdGFs
-X2RhdGFvYmpzOiAwLAoJdG90YWxfbm9uY29tcGxpYW50OiAwLAoKCglpbml0aWFsaXplOiBmdW5j
-dGlvbihvcHRzKSB7CgkJaWYoIG9wdHMuaWRzICkKCQkJdGhpcy5pZHMgPSBvcHRzLmlkczsKCQlp
-Ziggb3B0cy5zdGVwICkKCQkJdGhpcy5zdGVwID0gb3B0cy5zdGVwOwoJCWlmKCBvcHRzLnByZWZp
-eCApCgkJCXRoaXMucHJlZml4ID0gb3B0cy5wcmVmaXg7CgkJaWYoIG9wdHMub25GaW5pc2ggKQoJ
-CQl0aGlzLm9uRmluaXNoID0gb3B0cy5vbkZpbmlzaDsKCQlpZiggb3B0cy5vblByb2JsZW1zICkK
-CQkJdGhpcy5vblByb2JsZW1zID0gb3B0cy5vblByb2JsZW1zOwoJCWlmKCBvcHRzLnVybCApCgkJ
-ewoJCQl0aGlzLnVybCA9IG9wdHMudXJsOwoJCX0KCQlpZiggb3B0cy5wYXJhbWV0ZXJzICkKCQkJ
-dGhpcy5wYXJhbWV0ZXJzID0gb3B0cy5wYXJhbWV0ZXJzOwoJCWlmKCBvcHRzLmNvbnRhaW5lcl9p
-ZCApCgkJCXRoaXMuY29udGFpbmVyID0gJCggb3B0cy5jb250YWluZXJfaWQgKTsJLy8gc2hvdWxk
-IGZhaWwgaWYgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QuLi4KCQlpZiggb3B0cy5oYXNPd25Qcm9w
-ZXJ0eSgnc2hvd19jb21wbGlhbmNlJykgKQoJCXsKCQkJdGhpcy5zaG93X2NvbXBsaWFuY2UgPSBv
-cHRzLnNob3dfY29tcGxpYW5jZTsKCQl9CgkJaWYoIG9wdHMubGFiZWxzICkKCQl7CgkJCXRoaXMu
-bGFiZWxzID0gb3B0cy5sYWJlbHM7CgkJfQoJfSwKCglleGVjdXRlOiBmdW5jdGlvbigpIHsKCQkv
-LyBwcm9ncmVzcy1iYXIKCgkJdGhpcy5jb250YWluZXIuaW5zZXJ0KCBuZXcgRWxlbWVudCggJ2Rp
-dicsIHsgJ2NsYXNzJzogJ2VwX3JlcG9ydF9wcm9ncmVzc19iYXInLCAnaWQnOiB0aGlzLnByZWZp
-eCArICJfcHJvZ3Jlc3NfYmFyIiB9ICkgKTsJCgoJCXZhciBjdXJyZW50X2dyb3VwaW5nID0gbnVs
-bDsJLy8gbWlnaHQgbm90IGJlIHNldCBpbiB0aGUgcmV0dXJuZWQgdmFsdWUgYnV0IHRoYXQncyBh
-bGxvd2VkL09LCgoJCXZhciBkYXRhb2JqcyA9IHt9OwoJCXZhciBncm91cGVkID0gZmFsc2U7CgkJ
-dmFyIHNlZW5faWRzID0ge307CgkJdGhpcy5ub19pdGVtcyA9IHRoaXMuaWRzLmxlbmd0aDsKCQl0
-aGlzLnJldHJpZXZlZCA9IFtdOwoJCWlmKCAhTnVtYmVyLmlzSW50ZWdlcih0aGlzLmlkc1swXSkg
-KSAvL2lkcyBoYXZlIGJlZW4gZ3JvdXBlZAoJCXsJCgkJCWdyb3VwZWQgPSB0cnVlOwoJCQl0aGlz
-Lmdyb3VwZWRfaWRzID0gdGhpcy5pZHM7CgkJCXRoaXMuaWRzID0gW107CgkJCWZvciggdmFyIGkg
-PSAwOyBpIDwgdGhpcy5ncm91cGVkX2lkcy5sZW5ndGg7IGkrKyApCgkJCXsKCQkJCXRoaXMuaWRz
-ID0gdGhpcy5pZHMuY29uY2F0KHRoaXMuZ3JvdXBlZF9pZHNbaV0ubGlzdCk7CgkJCX0KCQkJLy90
-aGUgZ3JvdXBpbmcgbWF5IGhhdmUgY3JlYXRlZCBkdXBsaWNhdGUgcmVjb3JkcyAoaS5lLiBhIHJl
-Y29yZCBjYW4gYXBwZWFyIGluIG1vcmUgdGhhbiBvbmUgZ3JvdXApIC0gaXQncyBoYW5keSB0byBo
-YXZlIGFuIGFycmF5IG9mIGFsbCB0aGUgdW5pcXVlIHJlY29yZHMKCQkJdGhpcy51bmlxdWUgPSB0
-aGlzLmlkcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSwgaSwgYXIpeyByZXR1cm4gYXIuaW5kZXhPZihp
-dGVtKSA9PT0gaTsgfSk7CgkJCXRoaXMubm9faXRlbXMgPSB0aGlzLnVuaXF1ZS5sZW5ndGg7CgkJ
-fQoJCWZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmlkcy5sZW5ndGg7IGkrPXRoaXMuc3RlcCkKCQl7
-CgkJCS8vIGFyZ3VtZW50cyBmb3IgQWpheCBxdWVyeSBBTkQgY3JlYXRlcyB0aGUgSFRNTCBwbGFj
-ZWhvbGRlcnMgPGRpdj4ncyAodGhhdCB3aWxsIHJlY2VpdmUgdGhlIGNvbnRlbnQgb2YgdGhlIEFq
-YXggcXVlcnkuLi4pCQkJCQoJCQl2YXIgYXJncyA9ICcmYWpheD0nK3RoaXMucHJlZml4OwoJCQlm
-b3IodmFyIGogPSAwOyBqIDwgdGhpcy5zdGVwICYmIGkraiA8IHRoaXMuaWRzLmxlbmd0aDsgaisr
-KQoJCQl7CgkJCQlhcmdzICs9ICcmJyArIHRoaXMucHJlZml4ICsgJz0nICsgdGhpcy5pZHNbaStq
-XTsKCQkJCXZhciBpZCA9IHRoaXMucHJlZml4ICsgJ18nICsgdGhpcy5pZHNbaStqXTsKCQkJCXZh
-ciB0YXJnZXRfZWwgPSAkKCBpZCApOwoJCQkJaWYoIHRhcmdldF9lbCAhPSBudWxsICkKCQkJCXsK
-CQkJCQkvL3N0b3JlIGEgcmVjb3JkIG9mIHRoaXMgaW4gc2Vlbl9pZHMgdG8gZW5zdXJlIGVhY2gg
-cGxhY2Vob2xkZXIgaGFzIGEgdW5pcXVlIGlkCgkJCQkJaWYoICEoaWQgaW4gc2Vlbl9pZHMpICkK
-CQkJCQl7CgkJCQkJCXNlZW5faWRzW2lkXSA9IDE7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJ
-CQkJCXNlZW5faWRzW2lkXSA9IHNlZW5faWRzW2lkXSArIDE7CgkJCQkJfQoJCQkJCWlkID0gaWQg
-KyAiXyIgKyBzZWVuX2lkc1tpZF07CgkJCQl9CgkJCQkJCgkJCQl0aGlzLmNvbnRhaW5lci5pbnNl
-cnQoIG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X3JvdycsICdpZCc6
-IGlkLCAncG9zaXRpb24nOiBpK2ogfSApLCB7ICdwb3NpdGlvbic6ICdhZnRlcicgfSApOwoJCQl9
-CgkJCW5ldyBBamF4LlJlcXVlc3QoIHRoaXMudXJsLCB7CgkJCQltZXRob2Q6ICdnZXQnLAoJCQkJ
-cGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzICsgYXJncywKCQkJCW9uU3VjY2VzczogKGZ1bmN0
-aW9uKHRyYW5zcG9ydCkgewoKCQkJCQl2YXIganNvbiA9IHRyYW5zcG9ydC5yZXNwb25zZVRleHQu
-ZXZhbEpTT04oKTsKCQkJCQl2YXIgZGF0YSA9IGpzb24uZGF0YTsKCQoJCQkJCWlmKCBkYXRhID09
-IG51bGwgKQoJCQkJCQlkYXRhID0gbmV3IEFycmF5KCk7CgkJCQkJZm9yKCB2YXIgaT0wOyBpPGRh
-dGEubGVuZ3RoOyBpKysgKQoJCQkJCXsKCQkJCQkJdmFyIGVudHJ5ID0gZGF0YVtpXTsKCQkJCQoJ
-CQkJCQkvLyBlbnRyeS5kYXRhb2JqaWQKCQkJCQkJLy8gZW50cnkuc3VtbWFyeQoJCQkJCQkvLyBl
-bnRyeS5ncm91cGluZwoJCQkJCQkvLyBlbnRyeS5wcm9ibGVtcwoKCQkJCQkJaWYoIGVudHJ5ID09
-IG51bGwgKQoJCQkJCQkJY29udGludWU7CgkJCQkJCQoJCQkJCQl2YXIgZGF0YW9iamlkID0gZW50
-cnkuZGF0YW9iamlkOwoJCQkJCQlpZiggZGF0YW9iamlkID09IG51bGwgKQoJCQkJCQkJY29udGlu
-dWU7CgkJCQkJCWlmKCAhKGRhdGFvYmppZCBpbiBkYXRhb2JqcykgKQoJCQkJCQl7CgkJCQkJCQl0
-aGlzLmNvdW50Kys7CgkJCQkJCQlkYXRhb2Jqc1tkYXRhb2JqaWRdID0gZW50cnk7CgkJCQkJCX0K
-CQkJCQl9CgkJCQoJCQkJCS8vIHdlJ3ZlIHJldHJpZXZlZCBhbGwgdGhlIHJlY29yZHMJCQkJCgkJ
-CQkJaWYoIHRoaXMuY291bnQgPT0gdGhpcy5ub19pdGVtcyApCgkJCQkJewoJCQkJCQkkKCB0aGlz
-LnByZWZpeCArICdfcHJvZ3Jlc3NfYmFyJyApLnJlbW92ZSgpOwoJCQkJCQlpZiggdGhpcy5oYXNf
-cHJvYmxlbXMgKQoJCQkJCQkJdGhpcy5vblByb2JsZW1zKHRoaXMpOwoJCQkJCQl0aGlzLm9uRmlu
-aXNoKHRoaXMpOwoJCQkJCQkJCgkJCQkJCS8vYWRkIHRoZSBncm91cCBoZWFkaW5ncwoJCQkJCQlp
-Zihncm91cGVkKQoJCQkJCQl7CgkJCQkJCQl2YXIgcG9zaXRpb24gPSAwOwoJCQkJCQkJZm9yKCB2
-YXIgaSA9IDA7IGkgPCB0aGlzLmdyb3VwZWRfaWRzLmxlbmd0aDsgaSsrICkKCQkJCSAgICAgICAg
-ICAgICAgICAgICAgICAgIHsJCgkJCQkJCQkJdmFyIHRhcmdldF9lbCA9IGRvY3VtZW50LnF1ZXJ5
-U2VsZWN0b3JBbGwoJ1twb3NpdGlvbj0iJyArIHBvc2l0aW9uICsgJyJdJylbMF07CgkJCQkJCQkJ
-cG9zaXRpb24gPSBwb3NpdGlvbiArIHRoaXMuZ3JvdXBlZF9pZHNbaV0ubGlzdC5sZW5ndGg7CQkJ
-CgkJCQkJCQkJdmFyIGdyb3VwaW5nX2NvbnRhaW5lciA9IG5ldyBFbGVtZW50KCAnZGl2JywgeyAn
-Y2xhc3MnOiAnZXBfcmVwb3J0X2dyb3VwaW5nJyB9ICk7CiAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZWwuaW5zZXJ0
-KCB7ICdiZWZvcmUnIDogZ3JvdXBpbmdfY29udGFpbmVyIH0gKTsKICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nX2Nv
-bnRhaW5lci51cGRhdGUoIHRoaXMuZ3JvdXBlZF9pZHNbaV0ubGFiZWwgKTsKCQkJCSAgICAgICAg
-ICAgICAgICAgICAgICAgIH0KCQkJCQkJfQoKCQkJCQkJLy9hZGQgdGhlIGVwcmludCBzdW1tYXJp
-ZXMKCQkJCQkJdmFyIGFkZGVkX2lkcyA9IHt9OwoJCQkJCQlmb3IoIHZhciBjID0gMDsgYyA8IHRo
-aXMuaWRzLmxlbmd0aDsgYysrICkKCQkJCQkJewoJCQkJCQkJdmFyIGRhdGFvYmppZCA9IHRoaXMu
-aWRzW2NdOwoJCQkJCQkJdmFyIGVudHJ5ID0gZGF0YW9ianNbZGF0YW9iamlkXTsKCgkJCQkJCQkv
-L3N0b3JlIHRoYXQgd2UgaGF2ZSBhZGRlZCB0aGlzIG9iamVjdGlkCgkJCQkJCQlpZiggIShkYXRh
-b2JqaWQgaW4gYWRkZWRfaWRzKSApCgkJCQkJCQl7CgkJCQkJCQkJYWRkZWRfaWRzW2RhdGFvYmpp
-ZF0gPSAwOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCWFkZGVkX2lkc1tk
-YXRhb2JqaWRdID0gYWRkZWRfaWRzW2RhdGFvYmppZF0gKyAxOwoJCQkJCQkJfQoJCQkJCQkJdGhp
-cy50b3RhbF9kYXRhb2JqcysrOwoKCQkJCQkJCXZhciBzdW1tYXJ5ID0gZW50cnkuc3VtbWFyeTsK
-CgkJCQkJCQl2YXIgdGFyZ2V0X2lkID0gdGhpcy5wcmVmaXggKyAnXycgKyBkYXRhb2JqaWQ7CgkJ
-CQkJCQlpZiggYWRkZWRfaWRzW2RhdGFvYmppZF0gPiAwICkKCQkJCQkJCXsKCQkJCQkJCQl0YXJn
-ZXRfaWQgPSB0YXJnZXRfaWQgKyAnXycgKyBhZGRlZF9pZHNbZGF0YW9iamlkXTsKCQkJCQkJCX0K
-CQkJCQkJCXZhciB0YXJnZXRfZWwgPSAkKCB0YXJnZXRfaWQgKTsKCgkJCQkJCQlpZiggdGFyZ2V0
-X2VsICE9IG51bGwgJiYgc3VtbWFyeSAhPSBudWxsICkKCQkJCQkJCXsKCQkJCQkJCQl2YXIgc3Vt
-bWFyeV9lbCA9IHRhcmdldF9lbC5hcHBlbmRDaGlsZCggbmV3IEVsZW1lbnQoICdkaXYnLCB7ICdj
-bGFzcyc6ICdlcF9yZXBvcnRfcm93X3N1bW1hcnknIH0gKSApOwoJCQkJCQkJCXN1bW1hcnlfZWwu
-dXBkYXRlKCBzdW1tYXJ5ICk7CgoJCQkJCQkJCS8vdG90YWwgdXAgbm9uIGNvbXBsaWFudCByZWNv
-cmRzCgkJCQkJCQkJaWYoIGVudHJ5LmlzX2NvbXBsaWFudCA9PSBudWxsICYmIGVudHJ5LnByb2Js
-ZW1zICYmIGVudHJ5LnByb2JsZW1zLmxlbmd0aCApCgkJCQkJCQkJewoJCQkJCQkJCQl0aGlzLnRv
-dGFsX25vbmNvbXBsaWFudCsrOwoJCQkJCQkJCX0KCQkJCQkJCQkKCQkJCQkJCQlpZiggZW50cnku
-cHJvYmxlbXMgJiYgZW50cnkucHJvYmxlbXMubGVuZ3RoICkKCQkJCQkJCQl7CgkJCQkJCQkJCXZh
-ciBwcm9ibGVtc19lbCA9IHRhcmdldF9lbC5hcHBlbmRDaGlsZCggbmV3IEVsZW1lbnQoICd1bCcs
-IHsgJ2NsYXNzJzogJ2VwX3JlcG9ydF9yb3dfcHJvYmxlbXMnIH0gKSApOwoKCQkJCQkJCQkJZm9y
-KCB2YXIgcD0wOyBwPCBlbnRyeS5wcm9ibGVtcy5sZW5ndGg7IHArKyApCgkJCQkJCQkJCXsKCQkJ
-CQkJCQkJCXZhciBsaSA9IHByb2JsZW1zX2VsLmFwcGVuZENoaWxkKCBuZXcgRWxlbWVudCggJ2xp
-JyApKTsKCQkJCQkJCQkJCWxpLnVwZGF0ZSggZW50cnkucHJvYmxlbXNbcF0gKTsKCQkJCQkJCQkJ
-fQkJCQkJCQkJCgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCS8vYWRk
-IHN1cHBvcnQgZm9yIGNvbXBsaWFudCBpdGVtcyB0byBpbmNsdWRlIGJ1bGxldCBwb2ludHMgdG9v
-CgkJCQkJCQkJCWlmKCBlbnRyeS5idWxsZXRzICYmIGVudHJ5LmJ1bGxldHMubGVuZ3RoICkKICAg
+ZWxlbSkuaGlkZSgpOwoJCSQoZWxlbSkucmVtb3ZlQ2xhc3NOYW1lKCJzZWxlY3RlZF9mb3JtIik7
+CgkJJChlbGVtKS5zZWxlY3QoJ2lucHV0JykuZWFjaChmdW5jdGlvbiAoaW5wdXQpCgkJewoJCQkk
+KGlucHV0KS5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwgImRpc2FibGVkIik7CgkJfSk7Cgl9KTsK
+CQkKCS8vc2hvdyB0aGUgZm9ybSB3ZSB3YW50CgkkKGZvcm1pZCkuc2hvdygpOwoJJChmb3JtaWQp
+LmFkZENsYXNzTmFtZSgic2VsZWN0ZWRfZm9ybSIpOwoKCS8vZW5hYmxlIHRoaXMgZm9ybSdzIGlu
+cHV0IGVsZW1lbnRzCgkkKGZvcm1pZCkuc2VsZWN0KCdpbnB1dCcpLmVhY2goZnVuY3Rpb24gKGlu
+cHV0KQoJewoJCSQoaW5wdXQpLnJlbW92ZUF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKCX0pOwoKfTsK
+Ci8vIFVzZWQgYnkgdGhlIFNjcmVlbjo6UmVwb3J0OjpyZW5kZXIgbWV0aG9kCgp2YXIgRVByaW50
+c19TY3JlZW5fUmVwb3J0X0xvYWRlciA9IENsYXNzLmNyZWF0ZSh7CgloYXNfcHJvYmxlbXM6IDAs
+Cgljb3VudDogMCwKCXJ1bnM6IDAsCglwcm9ncmVzczogbnVsbCwKCWlkczogQXJyYXkoKSwKCXN0
+ZXA6IDIwLAoJcHJlZml4OiAnJywKCW9uUHJvYmxlbXM6IGZ1bmN0aW9uKCkge30sCglvbkZpbmlz
+aDogZnVuY3Rpb24oKSB7fSwKCXVybDogIiIsCglwYXJhbWV0ZXJzOiAiIiwKCWNvbnRhaW5lcjog
+bnVsbCwKCXNob3dfY29tcGxpYW5jZTogMSwJCgoJLy8gdG8gc2hvdyBhIHByZXR0eSBwcm9ncmVz
+cyBiYXIgKCUgY29tcGxpYW5jZSk6Cgl0b3RhbF9kYXRhb2JqczogMCwKCXRvdGFsX25vbmNvbXBs
+aWFudDogMCwKCgoJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0cykgewoJCWlmKCBvcHRzLmlkcyAp
+CgkJCXRoaXMuaWRzID0gb3B0cy5pZHM7CgkJaWYoIG9wdHMuc3RlcCApCgkJCXRoaXMuc3RlcCA9
+IG9wdHMuc3RlcDsKCQlpZiggb3B0cy5wcmVmaXggKQoJCQl0aGlzLnByZWZpeCA9IG9wdHMucHJl
+Zml4OwoJCWlmKCBvcHRzLm9uRmluaXNoICkKCQkJdGhpcy5vbkZpbmlzaCA9IG9wdHMub25GaW5p
+c2g7CgkJaWYoIG9wdHMub25Qcm9ibGVtcyApCgkJCXRoaXMub25Qcm9ibGVtcyA9IG9wdHMub25Q
+cm9ibGVtczsKCQlpZiggb3B0cy51cmwgKQoJCXsKCQkJdGhpcy51cmwgPSBvcHRzLnVybDsKCQl9
+CgkJaWYoIG9wdHMucGFyYW1ldGVycyApCgkJCXRoaXMucGFyYW1ldGVycyA9IG9wdHMucGFyYW1l
+dGVyczsKCQlpZiggb3B0cy5jb250YWluZXJfaWQgKQoJCQl0aGlzLmNvbnRhaW5lciA9ICQoIG9w
+dHMuY29udGFpbmVyX2lkICk7CS8vIHNob3VsZCBmYWlsIGlmIGNvbnRhaW5lciBkb2Vzbid0IGV4
+aXN0Li4uCgkJaWYoIG9wdHMuaGFzT3duUHJvcGVydHkoJ3Nob3dfY29tcGxpYW5jZScpICkKCQl7
+CgkJCXRoaXMuc2hvd19jb21wbGlhbmNlID0gb3B0cy5zaG93X2NvbXBsaWFuY2U7CgkJfQoJCWlm
+KCBvcHRzLmxhYmVscyApCgkJewoJCQl0aGlzLmxhYmVscyA9IG9wdHMubGFiZWxzOwoJCX0KCX0s
+CgoJZXhlY3V0ZTogZnVuY3Rpb24oKSB7CgkJLy8gcHJvZ3Jlc3MtYmFyCgoJCXRoaXMuY29udGFp
+bmVyLmluc2VydCggbmV3IEVsZW1lbnQoICdkaXYnLCB7ICdjbGFzcyc6ICdlcF9yZXBvcnRfcHJv
+Z3Jlc3NfYmFyJywgJ2lkJzogdGhpcy5wcmVmaXggKyAiX3Byb2dyZXNzX2JhciIgfSApICk7CQoK
+CQl2YXIgY3VycmVudF9ncm91cGluZyA9IG51bGw7CS8vIG1pZ2h0IG5vdCBiZSBzZXQgaW4gdGhl
+IHJldHVybmVkIHZhbHVlIGJ1dCB0aGF0J3MgYWxsb3dlZC9PSwoKCQl2YXIgZGF0YW9ianMgPSB7
+fTsKCQl2YXIgZ3JvdXBlZCA9IGZhbHNlOwoJCXZhciBzZWVuX2lkcyA9IHt9OwoJCXRoaXMubm9f
+aXRlbXMgPSB0aGlzLmlkcy5sZW5ndGg7CgkJdGhpcy5yZXRyaWV2ZWQgPSBbXTsKCQlpZiggIWlz
+SW50ZWdlcih0aGlzLmlkc1swXSkgKSAvL2lkcyBoYXZlIGJlZW4gZ3JvdXBlZAoJCXsJCgkJCWdy
+b3VwZWQgPSB0cnVlOwoJCQl0aGlzLmdyb3VwZWRfaWRzID0gdGhpcy5pZHM7CgkJCXRoaXMuaWRz
+ID0gW107CgkJCWZvciggdmFyIGkgPSAwOyBpIDwgdGhpcy5ncm91cGVkX2lkcy5sZW5ndGg7IGkr
+KyApCgkJCXsKCQkJCXRoaXMuaWRzID0gdGhpcy5pZHMuY29uY2F0KHRoaXMuZ3JvdXBlZF9pZHNb
+aV0ubGlzdCk7CgkJCX0KCQkJLy90aGUgZ3JvdXBpbmcgbWF5IGhhdmUgY3JlYXRlZCBkdXBsaWNh
+dGUgcmVjb3JkcyAoaS5lLiBhIHJlY29yZCBjYW4gYXBwZWFyIGluIG1vcmUgdGhhbiBvbmUgZ3Jv
+dXApIC0gaXQncyBoYW5keSB0byBoYXZlIGFuIGFycmF5IG9mIGFsbCB0aGUgdW5pcXVlIHJlY29y
+ZHMKCQkJdGhpcy51bmlxdWUgPSB0aGlzLmlkcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSwgaSwgYXIp
+eyByZXR1cm4gYXIuaW5kZXhPZihpdGVtKSA9PT0gaTsgfSk7CgkJCXRoaXMubm9faXRlbXMgPSB0
+aGlzLnVuaXF1ZS5sZW5ndGg7CgkJfQoJCWZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmlkcy5sZW5n
+dGg7IGkrPXRoaXMuc3RlcCkKCQl7CgkJCS8vIGFyZ3VtZW50cyBmb3IgQWpheCBxdWVyeSBBTkQg
+Y3JlYXRlcyB0aGUgSFRNTCBwbGFjZWhvbGRlcnMgPGRpdj4ncyAodGhhdCB3aWxsIHJlY2VpdmUg
+dGhlIGNvbnRlbnQgb2YgdGhlIEFqYXggcXVlcnkuLi4pCQkJCQoJCQl2YXIgYXJncyA9ICcmYWph
+eD0nK3RoaXMucHJlZml4OwoJCQlmb3IodmFyIGogPSAwOyBqIDwgdGhpcy5zdGVwICYmIGkraiA8
+IHRoaXMuaWRzLmxlbmd0aDsgaisrKQoJCQl7CgkJCQlhcmdzICs9ICcmJyArIHRoaXMucHJlZml4
+ICsgJz0nICsgdGhpcy5pZHNbaStqXTsKCQkJCXZhciBpZCA9IHRoaXMucHJlZml4ICsgJ18nICsg
+dGhpcy5pZHNbaStqXTsKCQkJCXZhciB0YXJnZXRfZWwgPSAkKCBpZCApOwoJCQkJaWYoIHRhcmdl
+dF9lbCAhPSBudWxsICkKCQkJCXsKCQkJCQkvL3N0b3JlIGEgcmVjb3JkIG9mIHRoaXMgaW4gc2Vl
+bl9pZHMgdG8gZW5zdXJlIGVhY2ggcGxhY2Vob2xkZXIgaGFzIGEgdW5pcXVlIGlkCgkJCQkJaWYo
+ICEoaWQgaW4gc2Vlbl9pZHMpICkKCQkJCQl7CgkJCQkJCXNlZW5faWRzW2lkXSA9IDE7CgkJCQkJ
+fQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXNlZW5faWRzW2lkXSA9IHNlZW5faWRzW2lkXSArIDE7
+CgkJCQkJfQoJCQkJCWlkID0gaWQgKyAiXyIgKyBzZWVuX2lkc1tpZF07CgkJCQl9CgkJCQkJCgkJ
+CQl0aGlzLmNvbnRhaW5lci5pbnNlcnQoIG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAn
+ZXBfcmVwb3J0X3JvdycsICdpZCc6IGlkLCAncG9zaXRpb24nOiBpK2ogfSApLCB7ICdwb3NpdGlv
+bic6ICdhZnRlcicgfSApOwoJCQl9CgkJCW5ldyBBamF4LlJlcXVlc3QoIHRoaXMudXJsLCB7CgkJ
+CQltZXRob2Q6ICdnZXQnLAoJCQkJcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzICsgYXJncywK
+CQkJCW9uU3VjY2VzczogKGZ1bmN0aW9uKHRyYW5zcG9ydCkgewoKCQkJCQl2YXIganNvbiA9IHRy
+YW5zcG9ydC5yZXNwb25zZVRleHQuZXZhbEpTT04oKTsKCQkJCQl2YXIgZGF0YSA9IGpzb24uZGF0
+YTsKCQoJCQkJCWlmKCBkYXRhID09IG51bGwgKQoJCQkJCQlkYXRhID0gbmV3IEFycmF5KCk7CgkJ
+CQkJZm9yKCB2YXIgaT0wOyBpPGRhdGEubGVuZ3RoOyBpKysgKQoJCQkJCXsKCQkJCQkJdmFyIGVu
+dHJ5ID0gZGF0YVtpXTsKCQkJCQoJCQkJCQkvLyBlbnRyeS5kYXRhb2JqaWQKCQkJCQkJLy8gZW50
+cnkuc3VtbWFyeQoJCQkJCQkvLyBlbnRyeS5ncm91cGluZwoJCQkJCQkvLyBlbnRyeS5wcm9ibGVt
+cwoKCQkJCQkJaWYoIGVudHJ5ID09IG51bGwgKQoJCQkJCQkJY29udGludWU7CgkJCQkJCQoJCQkJ
+CQl2YXIgZGF0YW9iamlkID0gZW50cnkuZGF0YW9iamlkOwoJCQkJCQlpZiggZGF0YW9iamlkID09
+IG51bGwgKQoJCQkJCQkJY29udGludWU7CgkJCQkJCWlmKCAhKGRhdGFvYmppZCBpbiBkYXRhb2Jq
+cykgKQoJCQkJCQl7CgkJCQkJCQl0aGlzLmNvdW50Kys7CgkJCQkJCQlkYXRhb2Jqc1tkYXRhb2Jq
+aWRdID0gZW50cnk7CgkJCQkJCX0KCQkJCQl9CgkJCQoJCQkJCS8vIHdlJ3ZlIHJldHJpZXZlZCBh
+bGwgdGhlIHJlY29yZHMJCQkJCgkJCQkJaWYoIHRoaXMuY291bnQgPT0gdGhpcy5ub19pdGVtcyAp
+CgkJCQkJewoJCQkJCQkkKCB0aGlzLnByZWZpeCArICdfcHJvZ3Jlc3NfYmFyJyApLnJlbW92ZSgp
+OwoJCQkJCQlpZiggdGhpcy5oYXNfcHJvYmxlbXMgKQoJCQkJCQkJdGhpcy5vblByb2JsZW1zKHRo
+aXMpOwoJCQkJCQl0aGlzLm9uRmluaXNoKHRoaXMpOwoJCQkJCQkJCgkJCQkJCS8vYWRkIHRoZSBn
+cm91cCBoZWFkaW5ncwoJCQkJCQlpZihncm91cGVkKQoJCQkJCQl7CgkJCQkJCQl2YXIgcG9zaXRp
+b24gPSAwOwoJCQkJCQkJZm9yKCB2YXIgaSA9IDA7IGkgPCB0aGlzLmdyb3VwZWRfaWRzLmxlbmd0
+aDsgaSsrICkKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHsJCgkJCQkJCQkJdmFyIHRhcmdl
+dF9lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twb3NpdGlvbj0iJyArIHBvc2l0aW9u
+ICsgJyJdJylbMF07CgkJCQkJCQkJcG9zaXRpb24gPSBwb3NpdGlvbiArIHRoaXMuZ3JvdXBlZF9p
+ZHNbaV0ubGlzdC5sZW5ndGg7CQkJCgkJCQkJCQkJdmFyIGdyb3VwaW5nX2NvbnRhaW5lciA9IG5l
+dyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X2dyb3VwaW5nJyB9ICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWxsZXRzX2VsID0gdGFy
-Z2V0X2VsLmFwcGVuZENoaWxkKCBuZXcgRWxlbWVudCggJ3VsJywgeyAnY2xhc3MnOiAnZXBfcmVw
-b3J0X3Jvd19idWxsZXRzJyB9ICkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCB2YXIg
-Yj0wOyBiPCBlbnRyeS5idWxsZXRzLmxlbmd0aDsgYisrICkKICAgICAgICAgICAgICAgICAgICAg
+ICAgICB0YXJnZXRfZWwuaW5zZXJ0KCB7ICdiZWZvcmUnIDogZ3JvdXBpbmdfY29udGFpbmVyIH0g
+KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIGdyb3VwaW5nX2NvbnRhaW5lci51cGRhdGUoIHRoaXMuZ3JvdXBlZF9pZHNbaV0u
+bGFiZWwgKTsKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIH0KCQkJCQkJfQoKCQkJCQkJLy9h
+ZGQgdGhlIGVwcmludCBzdW1tYXJpZXMKCQkJCQkJdmFyIGFkZGVkX2lkcyA9IHt9OwoJCQkJCQlm
+b3IoIHZhciBjID0gMDsgYyA8IHRoaXMuaWRzLmxlbmd0aDsgYysrICkKCQkJCQkJewoJCQkJCQkJ
+dmFyIGRhdGFvYmppZCA9IHRoaXMuaWRzW2NdOwoJCQkJCQkJdmFyIGVudHJ5ID0gZGF0YW9ianNb
+ZGF0YW9iamlkXTsKCgkJCQkJCQkvL3N0b3JlIHRoYXQgd2UgaGF2ZSBhZGRlZCB0aGlzIG9iamVj
+dGlkCgkJCQkJCQlpZiggIShkYXRhb2JqaWQgaW4gYWRkZWRfaWRzKSApCgkJCQkJCQl7CgkJCQkJ
+CQkJYWRkZWRfaWRzW2RhdGFvYmppZF0gPSAwOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJ
+ewoJCQkJCQkJCWFkZGVkX2lkc1tkYXRhb2JqaWRdID0gYWRkZWRfaWRzW2RhdGFvYmppZF0gKyAx
+OwoJCQkJCQkJfQoJCQkJCQkJdGhpcy50b3RhbF9kYXRhb2JqcysrOwoKCQkJCQkJCXZhciBzdW1t
+YXJ5ID0gZW50cnkuc3VtbWFyeTsKCgkJCQkJCQl2YXIgdGFyZ2V0X2lkID0gdGhpcy5wcmVmaXgg
+KyAnXycgKyBkYXRhb2JqaWQ7CgkJCQkJCQlpZiggYWRkZWRfaWRzW2RhdGFvYmppZF0gPiAwICkK
+CQkJCQkJCXsKCQkJCQkJCQl0YXJnZXRfaWQgPSB0YXJnZXRfaWQgKyAnXycgKyBhZGRlZF9pZHNb
+ZGF0YW9iamlkXTsKCQkJCQkJCX0KCQkJCQkJCXZhciB0YXJnZXRfZWwgPSAkKCB0YXJnZXRfaWQg
+KTsKCgkJCQkJCQlpZiggdGFyZ2V0X2VsICE9IG51bGwgJiYgc3VtbWFyeSAhPSBudWxsICkKCQkJ
+CQkJCXsKCQkJCQkJCQl2YXIgc3VtbWFyeV9lbCA9IHRhcmdldF9lbC5hcHBlbmRDaGlsZCggbmV3
+IEVsZW1lbnQoICdkaXYnLCB7ICdjbGFzcyc6ICdlcF9yZXBvcnRfcm93X3N1bW1hcnknIH0gKSAp
+OwoJCQkJCQkJCXN1bW1hcnlfZWwudXBkYXRlKCBzdW1tYXJ5ICk7CgoJCQkJCQkJCS8vdG90YWwg
+dXAgbm9uIGNvbXBsaWFudCByZWNvcmRzCgkJCQkJCQkJaWYoIGVudHJ5LmlzX2NvbXBsaWFudCA9
+PSBudWxsICYmIGVudHJ5LnByb2JsZW1zICYmIGVudHJ5LnByb2JsZW1zLmxlbmd0aCApCgkJCQkJ
+CQkJewoJCQkJCQkJCQl0aGlzLnRvdGFsX25vbmNvbXBsaWFudCsrOwoJCQkJCQkJCX0KCQkJCQkJ
+CQkKCQkJCQkJCQlpZiggZW50cnkucHJvYmxlbXMgJiYgZW50cnkucHJvYmxlbXMubGVuZ3RoICkK
+CQkJCQkJCQl7CgkJCQkJCQkJCXZhciBwcm9ibGVtc19lbCA9IHRhcmdldF9lbC5hcHBlbmRDaGls
+ZCggbmV3IEVsZW1lbnQoICd1bCcsIHsgJ2NsYXNzJzogJ2VwX3JlcG9ydF9yb3dfcHJvYmxlbXMn
+IH0gKSApOwoKCQkJCQkJCQkJZm9yKCB2YXIgcD0wOyBwPCBlbnRyeS5wcm9ibGVtcy5sZW5ndGg7
+IHArKyApCgkJCQkJCQkJCXsKCQkJCQkJCQkJCXZhciBsaSA9IHByb2JsZW1zX2VsLmFwcGVuZENo
+aWxkKCBuZXcgRWxlbWVudCggJ2xpJyApKTsKCQkJCQkJCQkJCWxpLnVwZGF0ZSggZW50cnkucHJv
+YmxlbXNbcF0gKTsKCQkJCQkJCQkJfQkJCQkJCQkJCgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJ
+CQkJCQl7CgkJCQkJCQkJCS8vYWRkIHN1cHBvcnQgZm9yIGNvbXBsaWFudCBpdGVtcyB0byBpbmNs
+dWRlIGJ1bGxldCBwb2ludHMgdG9vCgkJCQkJCQkJCWlmKCBlbnRyeS5idWxsZXRzICYmIGVudHJ5
+LmJ1bGxldHMubGVuZ3RoICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGkgPSBidWxsZXRzX2VsLmFw
-cGVuZENoaWxkKCBuZXcgRWxlbWVudCggJ2xpJyApKTsKICAgICAgICAgICAgICAgICAgICAgICAg
+IHZhciBidWxsZXRzX2VsID0gdGFyZ2V0X2VsLmFwcGVuZENoaWxkKCBuZXcgRWxlbWVudCggJ3Vs
+JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X3Jvd19idWxsZXRzJyB9ICkgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgIGxpLnVwZGF0ZSggZW50cnkuYnVsbGV0c1tiXSApOwogICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgZm9yKCB2YXIgYj0wOyBiPCBlbnRyeS5idWxsZXRzLmxlbmd0aDsgYisrICkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgfQoJCQkJCQkJCX0KCgkJCQkJCQkJLy9kaXNwbGF5IHN0YXRl
-CgkJCQkJCQkJdmFyIHJlID0gbmV3IFJlZ0V4cCgiXiMoPzpbMC05YS1mQS1GXXszfSl7MSwyfSQi
-KTsKCQkJCQkJCQlpZiggZW50cnkuc3RhdGUgJiYgcmUudGVzdChlbnRyeS5zdGF0ZSkgKQoJCQkJ
-CQkJCXsKCQkJCQkJCQkJdGFyZ2V0X2VsLnN0eWxlLmJvcmRlckxlZnRXaWR0aCA9ICc3cHgnOwog
+ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
+YXIgbGkgPSBidWxsZXRzX2VsLmFwcGVuZENoaWxkKCBuZXcgRWxlbWVudCggJ2xpJyApKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICB0YXJnZXRfZWwuc3R5bGUuYm9yZGVyTGVmdFN0eWxlID0gJ3NvbGlkJzsK
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgdGFyZ2V0X2VsLnN0eWxlLmJvcmRlckxlZnRDb2xvciA9IGVudHJ5LnN0
-YXRlOwoJCQkJCQkJCX0KCQkJCQkJCQllbHNlIC8vbm8gc3RhdGUgcHJvdmlkZWQsIHNvIGRlcml2
-ZSBvbmUgZnJvbSBleGlzdGVuY2Ugb2YgcHJvYmxlbXMKCQkJCQkJCQl7CgkJCQkJCQkJCWlmKCBl
-bnRyeS5wcm9ibGVtcyAmJiBlbnRyeS5wcm9ibGVtcy5sZW5ndGggKQoJCQkJCQkJCQl7CgkJCQkJ
-CQkJCQl0YXJnZXRfZWwuYWRkQ2xhc3NOYW1lKCAnZXBfcmVwb3J0X3Jvd19wcm9ibGVtcycgKTsK
-CQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCXRhcmdldF9lbC5h
-ZGRDbGFzc05hbWUoICdlcF9yZXBvcnRfcm93X29rJyApOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQlp
-ZiggIXRoaXMuc2hvd19jb21wbGlhbmNlICkKCQkJCQkJCQkJewoJCQkJCQkJCQkJdGFyZ2V0X2Vs
-LmFkZENsYXNzTmFtZSggJ2VwX3JlcG9ydF9yb3dfbm9fY29tcGxpYW5jZScgKTsKCQkJCQkJCQkJ
-fQoJCQkJCQkJCX0JCQkJCQkJCQoJCQkJCQkJCXRhcmdldF9lbC5zaG93KCk7CgoJCQkJCQkJCXZh
-ciBncm91cGluZyA9IGVudHJ5Lmdyb3VwaW5nOwoJCQkJCQkJCWlmKCBncm91cGluZyAhPSBudWxs
-ICkKCQkJCQkJCQl7CgkJCQkJCQkJCWlmKCBjdXJyZW50X2dyb3VwaW5nID09IG51bGwgfHwgY3Vy
-cmVudF9ncm91cGluZyAhPSBncm91cGluZykKCQkJCQkJCQkJewoJCQkJCQkJCQkJY3VycmVudF9n
-cm91cGluZyA9IGdyb3VwaW5nOwoJCQkJCQkJCQkJdmFyIGdyb3VwaW5nX2NvbnRhaW5lciA9IG5l
-dyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X2dyb3VwaW5nJyB9ICk7CgkJ
-CQkJCQkJCQl0YXJnZXRfZWwuaW5zZXJ0KCB7ICdiZWZvcmUnIDogZ3JvdXBpbmdfY29udGFpbmVy
-IH0gKTsKCQkJCQkJCQkJCWdyb3VwaW5nX2NvbnRhaW5lci51cGRhdGUoIGN1cnJlbnRfZ3JvdXBp
-bmcgKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoKCgkJCQkJCWlmKCB0
-aGlzLnRvdGFsX2RhdGFvYmpzICkKCQkJCQkJewoJCQkJCQkJCgkJCQkJCQl0aGlzLmNvbnRhaW5l
-ci5pbnNlcnRCZWZvcmUoIG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0
-X2NvbXBsaWFuY2VfY29udGFpbmVyJywgJ2lkJzogdGhpcy5wcmVmaXggKyAiX2NvbXBsaWFuY2Vf
-Y29udGFpbmVyIiB9ICksIHRoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQgKTsKCQkJCQkJCS8vc2V0
-IHVwIHRleHQgY29udGFpbmVyCgkJCQkJCQkkKCB0aGlzLnByZWZpeCArICJfY29tcGxpYW5jZV9j
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpLnVwZGF0ZSggZW50cnkuYnVsbGV0c1tiXSAp
+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQkJCQkJCX0KCgkJ
+CQkJCQkJLy9kaXNwbGF5IHN0YXRlCgkJCQkJCQkJdmFyIHJlID0gbmV3IFJlZ0V4cCgiXiMoPzpb
+MC05YS1mQS1GXXszfSl7MSwyfSQiKTsKCQkJCQkJCQlpZiggZW50cnkuc3RhdGUgJiYgcmUudGVz
+dChlbnRyeS5zdGF0ZSkgKQoJCQkJCQkJCXsKCQkJCQkJCQkJdGFyZ2V0X2VsLnN0eWxlLmJvcmRl
+ckxlZnRXaWR0aCA9ICc3cHgnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZWwuc3R5bGUuYm9yZGVy
+TGVmdFN0eWxlID0gJ3NvbGlkJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2VsLnN0eWxlLmJvcmRl
+ckxlZnRDb2xvciA9IGVudHJ5LnN0YXRlOwoJCQkJCQkJCX0KCQkJCQkJCQllbHNlIC8vbm8gc3Rh
+dGUgcHJvdmlkZWQsIHNvIGRlcml2ZSBvbmUgZnJvbSBleGlzdGVuY2Ugb2YgcHJvYmxlbXMKCQkJ
+CQkJCQl7CgkJCQkJCQkJCWlmKCBlbnRyeS5wcm9ibGVtcyAmJiBlbnRyeS5wcm9ibGVtcy5sZW5n
+dGggKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQl0YXJnZXRfZWwuYWRkQ2xhc3NOYW1lKCAnZXBfcmVw
+b3J0X3Jvd19wcm9ibGVtcycgKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsK
+CQkJCQkJCQkJCXRhcmdldF9lbC5hZGRDbGFzc05hbWUoICdlcF9yZXBvcnRfcm93X29rJyApOwoJ
+CQkJCQkJCQl9CgoJCQkJCQkJCQlpZiggIXRoaXMuc2hvd19jb21wbGlhbmNlICkKCQkJCQkJCQkJ
+ewoJCQkJCQkJCQkJdGFyZ2V0X2VsLmFkZENsYXNzTmFtZSggJ2VwX3JlcG9ydF9yb3dfbm9fY29t
+cGxpYW5jZScgKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0JCQkJCQkJCQoJCQkJCQkJCXRhcmdldF9l
+bC5zaG93KCk7CgoJCQkJCQkJCXZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwaW5nOwoJCQkJCQkJ
+CWlmKCBncm91cGluZyAhPSBudWxsICkKCQkJCQkJCQl7CgkJCQkJCQkJCWlmKCBjdXJyZW50X2dy
+b3VwaW5nID09IG51bGwgfHwgY3VycmVudF9ncm91cGluZyAhPSBncm91cGluZykKCQkJCQkJCQkJ
+ewoJCQkJCQkJCQkJY3VycmVudF9ncm91cGluZyA9IGdyb3VwaW5nOwoJCQkJCQkJCQkJdmFyIGdy
+b3VwaW5nX2NvbnRhaW5lciA9IG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVw
+b3J0X2dyb3VwaW5nJyB9ICk7CgkJCQkJCQkJCQl0YXJnZXRfZWwuaW5zZXJ0KCB7ICdiZWZvcmUn
+IDogZ3JvdXBpbmdfY29udGFpbmVyIH0gKTsKCQkJCQkJCQkJCWdyb3VwaW5nX2NvbnRhaW5lci51
+cGRhdGUoIGN1cnJlbnRfZ3JvdXBpbmcgKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0K
+CQkJCQkJfQoKCgkJCQkJCWlmKCB0aGlzLnRvdGFsX2RhdGFvYmpzICkKCQkJCQkJewoJCQkJCQkJ
+CgkJCQkJCQl0aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoIG5ldyBFbGVtZW50KCAnZGl2Jywg
+eyAnY2xhc3MnOiAnZXBfcmVwb3J0X2NvbXBsaWFuY2VfY29udGFpbmVyJywgJ2lkJzogdGhpcy5w
+cmVmaXggKyAiX2NvbXBsaWFuY2VfY29udGFpbmVyIiB9ICksIHRoaXMuY29udGFpbmVyLmZpcnN0
+Q2hpbGQgKTsKCQkJCQkJCS8vc2V0IHVwIHRleHQgY29udGFpbmVyCgkJCQkJCQkkKCB0aGlzLnBy
+ZWZpeCArICJfY29tcGxpYW5jZV9jb250YWluZXIiICkuYXBwZW5kQ2hpbGQoIG5ldyBFbGVtZW50
+KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X2NvbXBsaWFuY2VfdGV4dCcsICdpZCc6IHRo
+aXMucHJlZml4ICsgIl9jb21wbGlhbmNlX3RleHQiLCAgfSApKTsKCgkJCQkJCQkvL3NldCB1cCBv
+dXRwdXRzIGxhYmVsCgkJCQkJCQl2YXIgb3V0cHV0czsKCQkJCQkJCWlmKCB0aGlzLmxhYmVscyAp
+CgkJCQkJCQl7CgkJCQkJCQkJb3V0cHV0cyA9IHRoaXMubGFiZWxzLm91dHB1dHM7CgkJCQkJCQl9
+CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJb3V0cHV0cyA9ICJvdXRwdXQiOwoJCQkJCQkJ
+CWlmKCB0aGlzLnRvdGFsX2RhdGFvYmpzID4gMSApCgkJCQkJCQkJCW91dHB1dHMgPSBvdXRwdXRz
+ICsgInMiOwoJCQkJCQkJfQoKCQkJCQkJCWlmKCB0aGlzLnNob3dfY29tcGxpYW5jZSApCgkJCQkJ
+CQl7CgkJCQkJCQkJdmFyIHJlZl93aWR0aCA9IDIwMDsKCQkJCQkJCQl2YXIgY29tcGxpYW5jZSA9
+ICggdGhpcy50b3RhbF9kYXRhb2JqcyAtIHRoaXMudG90YWxfbm9uY29tcGxpYW50ICkgLyB0aGlz
+LnRvdGFsX2RhdGFvYmpzOwoKCQkJCQkJCQkkKCB0aGlzLnByZWZpeCArICJfY29tcGxpYW5jZV9j
b250YWluZXIiICkuYXBwZW5kQ2hpbGQoIG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAn
-ZXBfcmVwb3J0X2NvbXBsaWFuY2VfdGV4dCcsICdpZCc6IHRoaXMucHJlZml4ICsgIl9jb21wbGlh
-bmNlX3RleHQiLCAgfSApKTsKCgkJCQkJCQkvL3NldCB1cCBvdXRwdXRzIGxhYmVsCgkJCQkJCQl2
-YXIgb3V0cHV0czsKCQkJCQkJCWlmKCB0aGlzLmxhYmVscyApCgkJCQkJCQl7CgkJCQkJCQkJb3V0
-cHV0cyA9IHRoaXMubGFiZWxzLm91dHB1dHM7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7
-CgkJCQkJCQkJb3V0cHV0cyA9ICJvdXRwdXQiOwoJCQkJCQkJCWlmKCB0aGlzLnRvdGFsX2RhdGFv
-YmpzID4gMSApCgkJCQkJCQkJCW91dHB1dHMgPSBvdXRwdXRzICsgInMiOwoJCQkJCQkJfQoKCQkJ
-CQkJCWlmKCB0aGlzLnNob3dfY29tcGxpYW5jZSApCgkJCQkJCQl7CgkJCQkJCQkJdmFyIHJlZl93
-aWR0aCA9IDIwMDsKCQkJCQkJCQl2YXIgY29tcGxpYW5jZSA9ICggdGhpcy50b3RhbF9kYXRhb2Jq
-cyAtIHRoaXMudG90YWxfbm9uY29tcGxpYW50ICkgLyB0aGlzLnRvdGFsX2RhdGFvYmpzOwoKCQkJ
-CQkJCQkkKCB0aGlzLnByZWZpeCArICJfY29tcGxpYW5jZV9jb250YWluZXIiICkuYXBwZW5kQ2hp
-bGQoIG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X2NvbXBsaWFuY2Vf
-d3JhcHBlcicsICdpZCc6IHRoaXMucHJlZml4ICsgIl9jb21wbGlhbmNlIiwgJ3N0eWxlJzogJ3dp
-ZHRoOiAnK3JlZl93aWR0aCArICdweCcgfSApICk7CgoJCQkJCQkJCXZhciBjb21wbGlhbmNlX3dp
-ZHRoID0gTWF0aC5mbG9vciggMjAwICogY29tcGxpYW5jZSApOwoJCgkJCQkJCQkJJCggdGhpcy5w
-cmVmaXggKyAiX2NvbXBsaWFuY2UiICkuYXBwZW5kQ2hpbGQoIG5ldyBFbGVtZW50KCAnZGl2Jywg
-eyAnY2xhc3MnOiAnZXBfcmVwb3J0X2NvbXBsaWFuY2UnLCAnc3R5bGUnOiAnd2lkdGg6Jytjb21w
-bGlhbmNlX3dpZHRoICsgJ3B4JyB9ICkgKTsKCQoJCQkJCQkJCSQoIHRoaXMucHJlZml4ICsgIl9j
-b21wbGlhbmNlX3RleHQiICkudXBkYXRlKCB0aGlzLnRvdGFsX2RhdGFvYmpzICsgIiAiICsgb3V0
-cHV0cyArICIgLSAiICsgTWF0aC5mbG9vciggY29tcGxpYW5jZSAqIDEwMCApICsgIiUgY29tcGxp
-YW5jZSIpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSQoIHRoaXMucHJl
-Zml4ICsgIl9jb21wbGlhbmNlX3RleHQiICkudXBkYXRlKCB0aGlzLnRvdGFsX2RhdGFvYmpzICsg
-IiAiICsgb3V0cHV0cyApOwoJCQkJCQkJfQoJCQkJCQl9CQoKCQkJCQl9CgkJCQkJZWxzZQoJCQkJ
-CXsKCQkJCQkJdmFyIHdpZHRoID0gMjAwOwoJCQkJCQkkKCB0aGlzLnByZWZpeCArICdfcHJvZ3Jl
-c3NfYmFyJyApLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9IE1hdGgucm91bmQoLXdpZHRoICsg
-d2lkdGggKiB0aGlzLmNvdW50IC8gdGhpcy5pZHMubGVuZ3RoKSArICJweCAwcHgiOwoJCQkJCX0K
-CgkJCQkJaWYoIHRoaXMucnVucyA9PSAwICYmIHRoaXMuY291bnQgPT0gMCApCgkJCQkJewoJCQkJ
-CQl2YXIgcE5vZGUgPSAkKCB0aGlzLnByZWZpeCArICdfcHJvZ3Jlc3NfYmFyJyApLnBhcmVudE5v
-ZGU7CgkJCQkJCSQodGhpcy5wcmVmaXggKyAnX3Byb2dyZXNzX2JhcicpLnJlbW92ZSgpOwoJCQkJ
-CQl2YXIgc3BhbiA9IG5ldyBFbGVtZW50KCAnc3BhbicsIHsgJ2NsYXNzJzogJ2VwX3JlZl9yZXBv
-cnRfZW1wdHknIH0gKTsKCQkJCQkJc3Bhbi51cGRhdGUoICdSZXBvcnQgZW1wdHknICk7CgkJCQkJ
-CXBOb2RlLmluc2VydCggc3BhbiApOwoJCQkJCX0KCQkJCQl0aGlzLnJ1bnMrKzsKCgkJCQl9KS5i
-aW5kKHRoaXMpCgkJCX0pOwoJCX0KCQlpZiggdGhpcy5pZHMgPT0gbnVsbCB8fCB0aGlzLmlkcy5s
-ZW5ndGggPT0gMCApCgkJewoJCQl2YXIgcE5vZGUgPSAkKHRoaXMucHJlZml4ICsgJ19wcm9ncmVz
-c19iYXInKS5wYXJlbnROb2RlOwoJCQkkKHRoaXMucHJlZml4ICsgJ19wcm9ncmVzc19iYXInKS5o
-aWRlKCk7CgkJCXZhciBzcGFuID0gbmV3IEVsZW1lbnQoICdzcGFuJywgeyAnY2xhc3MnOiAnZXBf
-cmVmX3JlcG9ydF9lbXB0eScgfSApOwoJCQlzcGFuLnVwZGF0ZSggJ1JlcG9ydCBlbXB0eScgKTsK
-CQkJcE5vZGUuaW5zZXJ0KCBzcGFuICk7CgkJfQoJfQoKCn0pOwoKZnVuY3Rpb24gZ3JvdXBfcmVw
-b3J0KGdyb3VwKQp7Cglkb2N1bWVudC5ncm91cF9yZXBvcnQuZ3JvdXAudmFsdWUgPSBncm91cDsK
-CWRvY3VtZW50Lmdyb3VwX3JlcG9ydC5zdWJtaXQoKTsKfQoKZnVuY3Rpb24gc29ydF9yZXBvcnQo
-c29ydCkKewoJZG9jdW1lbnQuc29ydF9yZXBvcnQuc29ydC52YWx1ZSA9IHNvcnQ7Cglkb2N1bWVu
-dC5zb3J0X3JlcG9ydC5zdWJtaXQoKTsKfQo=
+ZXBfcmVwb3J0X2NvbXBsaWFuY2Vfd3JhcHBlcicsICdpZCc6IHRoaXMucHJlZml4ICsgIl9jb21w
+bGlhbmNlIiwgJ3N0eWxlJzogJ3dpZHRoOiAnK3JlZl93aWR0aCArICdweCcgfSApICk7CgoJCQkJ
+CQkJCXZhciBjb21wbGlhbmNlX3dpZHRoID0gTWF0aC5mbG9vciggMjAwICogY29tcGxpYW5jZSAp
+OwoJCgkJCQkJCQkJJCggdGhpcy5wcmVmaXggKyAiX2NvbXBsaWFuY2UiICkuYXBwZW5kQ2hpbGQo
+IG5ldyBFbGVtZW50KCAnZGl2JywgeyAnY2xhc3MnOiAnZXBfcmVwb3J0X2NvbXBsaWFuY2UnLCAn
+c3R5bGUnOiAnd2lkdGg6Jytjb21wbGlhbmNlX3dpZHRoICsgJ3B4JyB9ICkgKTsKCQoJCQkJCQkJ
+CSQoIHRoaXMucHJlZml4ICsgIl9jb21wbGlhbmNlX3RleHQiICkudXBkYXRlKCB0aGlzLnRvdGFs
+X2RhdGFvYmpzICsgIiAiICsgb3V0cHV0cyArICIgLSAiICsgTWF0aC5mbG9vciggY29tcGxpYW5j
+ZSAqIDEwMCApICsgIiUgY29tcGxpYW5jZSIpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJ
+ewoJCQkJCQkJCSQoIHRoaXMucHJlZml4ICsgIl9jb21wbGlhbmNlX3RleHQiICkudXBkYXRlKCB0
+aGlzLnRvdGFsX2RhdGFvYmpzICsgIiAiICsgb3V0cHV0cyApOwoJCQkJCQkJfQoJCQkJCQl9CQoK
+CQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdmFyIHdpZHRoID0gMjAwOwoJCQkJCQkkKCB0
+aGlzLnByZWZpeCArICdfcHJvZ3Jlc3NfYmFyJyApLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9
+IE1hdGgucm91bmQoLXdpZHRoICsgd2lkdGggKiB0aGlzLmNvdW50IC8gdGhpcy5pZHMubGVuZ3Ro
+KSArICJweCAwcHgiOwoJCQkJCX0KCgkJCQkJaWYoIHRoaXMucnVucyA9PSAwICYmIHRoaXMuY291
+bnQgPT0gMCApCgkJCQkJewoJCQkJCQl2YXIgcE5vZGUgPSAkKCB0aGlzLnByZWZpeCArICdfcHJv
+Z3Jlc3NfYmFyJyApLnBhcmVudE5vZGU7CgkJCQkJCSQodGhpcy5wcmVmaXggKyAnX3Byb2dyZXNz
+X2JhcicpLnJlbW92ZSgpOwoJCQkJCQl2YXIgc3BhbiA9IG5ldyBFbGVtZW50KCAnc3BhbicsIHsg
+J2NsYXNzJzogJ2VwX3JlZl9yZXBvcnRfZW1wdHknIH0gKTsKCQkJCQkJc3Bhbi51cGRhdGUoICdS
+ZXBvcnQgZW1wdHknICk7CgkJCQkJCXBOb2RlLmluc2VydCggc3BhbiApOwoJCQkJCX0KCQkJCQl0
+aGlzLnJ1bnMrKzsKCgkJCQl9KS5iaW5kKHRoaXMpCgkJCX0pOwoJCX0KCQlpZiggdGhpcy5pZHMg
+PT0gbnVsbCB8fCB0aGlzLmlkcy5sZW5ndGggPT0gMCApCgkJewoJCQl2YXIgcE5vZGUgPSAkKHRo
+aXMucHJlZml4ICsgJ19wcm9ncmVzc19iYXInKS5wYXJlbnROb2RlOwoJCQkkKHRoaXMucHJlZml4
+ICsgJ19wcm9ncmVzc19iYXInKS5oaWRlKCk7CgkJCXZhciBzcGFuID0gbmV3IEVsZW1lbnQoICdz
+cGFuJywgeyAnY2xhc3MnOiAnZXBfcmVmX3JlcG9ydF9lbXB0eScgfSApOwoJCQlzcGFuLnVwZGF0
+ZSggJ1JlcG9ydCBlbXB0eScgKTsKCQkJcE5vZGUuaW5zZXJ0KCBzcGFuICk7CgkJfQoJfQoKCn0p
+OwoKZnVuY3Rpb24gZ3JvdXBfcmVwb3J0KGdyb3VwKQp7Cglkb2N1bWVudC5ncm91cF9yZXBvcnQu
+Z3JvdXAudmFsdWUgPSBncm91cDsKCWRvY3VtZW50Lmdyb3VwX3JlcG9ydC5zdWJtaXQoKTsKfQoK
+ZnVuY3Rpb24gc29ydF9yZXBvcnQoc29ydCkKewoJZG9jdW1lbnQuc29ydF9yZXBvcnQuc29ydC52
+YWx1ZSA9IHNvcnQ7Cglkb2N1bWVudC5zb3J0X3JlcG9ydC5zdWJtaXQoKTsKfQoKZnVuY3Rpb24g
+aXNJbnRlZ2VyKG51bSkgewogIHJldHVybiAobnVtIF4gMCkgPT09IG51bTsKfQo=
static/style/auto/reports.css
text/x-asm
- b6c44764b4d4d9bd07dafde0bd9cfaaf
+ 04cbc93d0515c56f56929cd6a16f5a44
MD5
- 1922
+ 2151
ZGl2LmVwX3JlcG9ydF9yb3cgewoJcGFkZGluZzogNXB4IDVweDsKCW1hcmdpbi1ib3R0b206IDVw
eDsKfQoKZGl2LmVwX3JlcG9ydF9yb3dfcHJvYmxlbXMgewoJYm9yZGVyLWxlZnQ6IHNvbGlkIDdw
eCAjQzQxRjFGOwp9CgpkaXYuZXBfcmVwb3J0X3Jvd19vayB7CiAgICAgICAgYm9yZGVyLWxlZnQ6
@@ -2266,9 +2407,13 @@ YmxvY2s7Cgl2ZXJ0aWNhbC1hbGlnbjogdG9wOwoJbWluLXdpZHRoOiAxNTBweDsKfQoKZGl2I2Vw
X3JlcG9ydF9leHBvcnRfY29udGVudF9pbm5lciAucmVwb3J0X2V4cG9ydF9vcHRpb25zIGg0CnsK
CWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXZlcnRpY2FsLWFsaWduOiB0b3A7CgltYXJnaW4tYm90
dG9tOiAwOwp9CgpkaXYjZXBfcmVwb3J0X2V4cG9ydF9jb250ZW50X2lubmVyIC5yZXBvcnRfZXhw
-b3J0X29wdGlvbnMgdWwKewoJcGFkZGluZzogMCAxMHB4IDAgMDsKfQoKLyogSFRNTCBSZXBvcnRz
-ICovCmEuaHRtbF9yZXBvcnRfcHJpbnR7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7CQp9CgphLmh0
-bWxfcmVwb3J0X3ByaW50OmhvdmVyewoJY29sb3I6IHdoaXRlOwkKfQo=
+b3J0X29wdGlvbnMgdWwKewoJcGFkZGluZzogMCAxMHB4IDAgMDsKfQoKI2VwX3JlcG9ydF9leHBv
+cnRfY29udGVudF9pbm5lciAuc2VsZWN0X2J1dHRvbgp7CiAgICAgICAgZmxvYXQ6IHJpZ2h0Owp9
+CgojY3VzdG9tX3JlcG9ydCAuZXBfc2VhcmNoX2J1dHRvbnMgPiBkaXYKewogICAgICAgIGRpc3Bs
+YXk6IGlubGluZS1ibG9jazsKfQoKI2N1c3RvbV9yZXBvcnQgLmVwX3NlYXJjaF9idXR0b25zIC5j
+bGVhcl9idXR0b24KewogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7Cn0KCi8qIEhUTUwgUmVwb3J0
+cyAqLwphLmh0bWxfcmVwb3J0X3ByaW50ewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwkKfQoKYS5o
+dG1sX3JlcG9ydF9wcmludDpob3ZlcnsKCWNvbG9yOiB3aGl0ZTsJCn0K
@@ -2723,7 +2868,7 @@ mCeqVAAAAABJRU5ErkJggg==
coverimage
- 3.0
+ 3.1
-
diff --git a/reports.epmi b/reports.epmi
index 88b9fab..a89b2d5 100644
--- a/reports.epmi
+++ b/reports.epmi
@@ -15,9 +15,9 @@
epm/reports/cfg/cfg.d/z_reports.pl
text/plain
- 334237b831581075209dbbedf084d878
+ 48c622ad150bea255ba6fbee7e37083b
MD5
- 2609
+ 2869
epm/reports/cfg/cfg.d/z_search_reports.pl
@@ -29,16 +29,16 @@
lang/en/phrases/reports.xml
application/xml
- 2c63892db4ecf79ed204400c9acb3f76
+ f344518160d45ccd1d1709a926d9e6d1
MD5
- 2386
+ 2563
plugins/EPrints/Plugin/Export/Grid2.pm
text/plain
- dd9b2c0a038b1f9f51b618a4b2e11c4b
+ 83d730999923d798d1acbb44c4a91667
MD5
- 9699
+ 10222
plugins/EPrints/Plugin/Export/MultilineCSV2.pm
@@ -78,16 +78,16 @@
plugins/EPrints/Plugin/Export/Report/JSON.pm
text/plain
- 3ee98189aee3464f0992881814056a72
+ 3786d272e437a488408e5825270e1609
MD5
- 6567
+ 6648
plugins/EPrints/Plugin/Screen/Report.pm
text/plain
- 210449eac1f7ee02e7519beead2c640b
+ e88058df69ea1db3f145b316f6d1ada2
MD5
- 37100
+ 43956
plugins/EPrints/Plugin/Screen/Report/EPrint.pm
@@ -134,16 +134,16 @@
static/javascript/auto/reports.js
text/plain
- 433f2b10185e875b322d0566e4d787c8
+ d02c8742a8d57f71e94e1c62635b94de
MD5
- 12566
+ 12701
static/style/auto/reports.css
text/x-asm
- b6c44764b4d4d9bd07dafde0bd9cfaaf
+ 04cbc93d0515c56f56929cd6a16f5a44
MD5
- 1922
+ 2151
text/x-asm
@@ -166,7 +166,7 @@
coverimage
- 3.0
+ 3.1
-