From 0d5f51b4b5148d638e933ed819417c55193c6929 Mon Sep 17 00:00:00 2001 From: John Mertic Date: Fri, 21 Oct 2011 15:01:17 -0400 Subject: [PATCH] Release 6.3.0RC3 --- cron.php | 4 +- .../EmailAddressRelationship.php | 114 +++++ data/Relationships/M2MRelationship.php | 90 ++-- data/Relationships/One2MBeanRelationship.php | 13 +- data/Relationships/One2MRelationship.php | 16 + data/Relationships/One2OneRelationship.php | 24 +- data/Relationships/RelationshipFactory.php | 8 +- data/Relationships/SugarRelationship.php | 5 +- data/SugarBean.php | 29 +- files.md5 | 163 +++---- include/EditView/EditView2.php | 5 +- .../MVC/Controller/entry_point_registry.php | 1 - include/MVC/View/views/view.detail.php | 6 +- include/SubPanel/SugarTab.php | 7 + include/SubPanel/tpls/singletabmenu.tpl | 2 +- .../SugarEmailAddress/SugarEmailAddress.js | 2 +- .../SugarFields/Fields/Relate/EditView.tpl | 9 +- include/SugarLogger/SugarLogger.php | 26 +- include/database/MssqlManager.php | 2 +- include/javascript/ajaxUI.js | 9 +- include/javascript/jsclass_async.js | 2 +- include/javascript/quickCompose.js | 2 +- include/javascript/sugar_3.js | 3 - include/javascript/sugar_grp1.js | 14 +- include/javascript/sugar_grp_emails.js | 22 +- include/javascript/sugar_grp_jsolait.js | 2 +- include/javascript/sugar_grp_quickcomp.js | 20 +- include/language/en_us.lang.php | 1 + include/utils/db_utils.php | 27 ++ include/utils/layout_utils.php | 2 + include/utils/mvc_utils.php | 2 +- install/checkDBSettings.php | 25 +- install/language/en_us.lang.php | 4 +- json_server.php | 415 +----------------- .../SugarEmailAddress/SugarEmailAddress.js | 15 +- .../src_files/include/javascript/ajaxUI.js | 22 +- .../include/javascript/jsclass_async.js | 10 +- .../include/javascript/quickCompose.js | 2 +- .../src_files/include/javascript/sugar_3.js | 24 +- .../src_files/modules/Documents/documents.js | 18 +- .../Administration/RebuildRelationship.php | 2 +- modules/Administration/controller.php | 4 +- .../Administration/language/en_us.lang.php | 4 +- .../metadata/adminpaneldefs.php | 1 - modules/Administration/repairDatabase.php | 6 +- .../templates/ConfigureAjaxUI.tpl | 1 + modules/Calls/CallFormBase.php | 4 +- modules/Configurator/language/en_us.lang.php | 2 + modules/Configurator/tpls/EditView.tpl | 1 + modules/Documents/documents.js | 2 +- .../Documents/metadata/quickcreatedefs.php | 4 +- modules/Documents/views/view.edit.php | 14 +- modules/Emails/EditView.php | 3 - modules/Emails/EditViewArchive.html | 16 +- modules/Emails/javascript/Email.js | 26 +- modules/Emails/javascript/EmailUICompose.js | 20 +- modules/Emails/templates/_baseEmail.tpl | 2 + modules/Employees/Save.php | 13 + modules/Home/index.php | 4 +- modules/Leads/tpls/ConvertLead.tpl | 4 +- modules/MailMerge/Step1.php | 4 +- modules/MailMerge/Step2.html | 36 +- modules/MailMerge/controller.php | 115 +++++ modules/Meetings/MeetingFormBase.php | 4 +- modules/Meetings/Menu.php | 2 +- .../relationships/ActivitiesRelationship.php | 1 + modules/ModuleBuilder/tpls/layoutView.tpl | 7 +- modules/Schedulers/Scheduler.php | 8 +- modules/vCals/vCal.php | 2 +- sugar_version.php | 8 +- tests/SugarTestUserUtilities.php | 5 +- tests/include/MVC/View/views/Bug47572Test.php | 61 +++ tests/include/ValidDBNameTest.php | 43 ++ tests/modules/Emails/Bug45960Test.php | 8 + tests/modules/Import/Bug45907Test.csv | 11 + tests/modules/Import/Bug45907Test.php | 89 ++++ tests/modules/Leads/Bug45187Test.php | 97 ++++ tests/modules/Leads/ConvertLeadTests.php | 74 ++++ .../ModuleBuilder/parsers/Bug44712Test.php | 58 +++ 79 files changed, 1173 insertions(+), 760 deletions(-) create mode 100644 data/Relationships/EmailAddressRelationship.php create mode 100644 modules/MailMerge/controller.php create mode 100755 tests/include/MVC/View/views/Bug47572Test.php create mode 100755 tests/modules/Import/Bug45907Test.csv create mode 100755 tests/modules/Import/Bug45907Test.php create mode 100755 tests/modules/Leads/Bug45187Test.php create mode 100755 tests/modules/ModuleBuilder/parsers/Bug44712Test.php diff --git a/cron.php b/cron.php index 4cb4b6d9..8f3e8a21 100644 --- a/cron.php +++ b/cron.php @@ -93,7 +93,9 @@ if(!is_file($cachePath.'/'.$pid)) { /////////////////////////////////////////////////////////////////////////////// //// EXECUTE IF VALID TIME (NOT DDOS) -if($timestamp[0] < strtotime(date('H:i'))) { +// mjamil | bug # 45229 - schedulers not able to run due to current time being equal to +// $timestamp[0] +if($timestamp[0] <= strtotime(date('H:i'))) { if(is_writable($cachePath.'/'.$pid)) { write_array_to_file('timestamp', array(strtotime(date('H:i'))) , $cachePath.'/'.$pid); require('modules/Schedulers/Scheduler.php'); diff --git a/data/Relationships/EmailAddressRelationship.php b/data/Relationships/EmailAddressRelationship.php new file mode 100644 index 00000000..b69be30e --- /dev/null +++ b/data/Relationships/EmailAddressRelationship.php @@ -0,0 +1,114 @@ +value pairs of fields to save on the relationship + * @return boolean true if successful + */ + public function add($lhs, $rhs, $additionalFields = array()) + { + $lhsLinkName = $this->lhsLink; + + if (empty($lhs->$lhsLinkName) && !$lhs->load_relationship($lhsLinkName)) + { + $lhsClass = get_class($lhs); + $GLOBALS['log']->fatal("could not load LHS $lhsLinkName in $lhsClass"); + return false; + } + + //Many to many has no additional logic, so just add a new row to the table and notify the beans. + $dataToInsert = $this->getRowToInsert($lhs, $rhs, $additionalFields); + + $this->addRow($dataToInsert); + + if ($this->self_referencing) + $this->addSelfReferencing($lhs, $rhs, $additionalFields); + + if ($lhs->$lhsLinkName->beansAreLoaded()) + $lhs->$lhsLinkName->addBean($rhs); + + $this->callAfterAdd($lhs, $rhs, $lhsLinkName); + } + + public function remove($lhs, $rhs) + { + $lhsLinkName = $this->lhsLink; + + if (!($lhs instanceof SugarBean)) { + $GLOBALS['log']->fatal("LHS is not a SugarBean object"); + return false; + } + if (!($rhs instanceof SugarBean)) { + $GLOBALS['log']->fatal("RHS is not a SugarBean object"); + return false; + } + if (empty($lhs->$lhsLinkName) && !$lhs->load_relationship($lhsLinkName)) + { + $GLOBALS['log']->fatal("could not load LHS $lhsLinkName"); + return false; + } + $dataToRemove = array( + $this->def['join_key_lhs'] => $lhs->id, + $this->def['join_key_rhs'] => $rhs->id + ); + + $this->removeRow($dataToRemove); + + if ($this->self_referencing) + $this->removeSelfReferencing($lhs, $rhs); + + if (empty($_SESSION['disable_workflow']) || $_SESSION['disable_workflow'] != "Yes") + { + if (!empty($lhs->$lhsLinkName)) + { + $lhs->$lhsLinkName->load(); + $this->callAfterDelete($lhs, $rhs, $lhsLinkName); + } + } + } +} \ No newline at end of file diff --git a/data/Relationships/M2MRelationship.php b/data/Relationships/M2MRelationship.php index 9ff6e5d4..a3acdced 100644 --- a/data/Relationships/M2MRelationship.php +++ b/data/Relationships/M2MRelationship.php @@ -138,6 +138,9 @@ class M2MRelationship extends SugarRelationship $this->addRow($dataToInsert); + if ($this->self_referencing) + $this->addSelfReferencing($lhs, $rhs, $additionalFields); + if ($lhs->$lhsLinkName->beansAreLoaded()) $lhs->$lhsLinkName->addBean($rhs); if ($rhs->$rhsLinkName->beansAreLoaded()) @@ -181,6 +184,21 @@ class M2MRelationship extends SugarRelationship return $row; } + /** + * Adds the reversed version of this relationship to the table so that it can be accessed from either side equally + * @param $lhs + * @param $rhs + * @param array $additionalFields + * @return void + */ + protected function addSelfReferencing($lhs, $rhs, $additionalFields = array()) + { + if ($rhs->id != $lhs->id) + { + $dataToInsert = $this->getRowToInsert($rhs, $lhs, $additionalFields); + $this->addRow($dataToInsert); + } + } public function remove($lhs, $rhs) { @@ -213,13 +231,41 @@ class M2MRelationship extends SugarRelationship $this->removeRow($dataToRemove); + if ($this->self_referencing) + $this->removeSelfReferencing($lhs, $rhs); + if (empty($_SESSION['disable_workflow']) || $_SESSION['disable_workflow'] != "Yes") { - $lhs->$lhsLinkName->load(); - $rhs->$rhsLinkName->load(); + if (!empty($lhs->$lhsLinkName)) + { + $lhs->$lhsLinkName->load(); + $this->callAfterDelete($lhs, $rhs, $lhsLinkName); + } - $this->callAfterDelete($lhs, $rhs, $lhsLinkName); - $this->callAfterDelete($rhs, $lhs, $rhsLinkName); + if ($rhs->$rhsLinkName instanceof Link2) + { + $rhs->$rhsLinkName->load(); + $this->callAfterDelete($rhs, $lhs, $rhsLinkName); + } + } + } + + /** + * Removes the reversed version of this relationship + * @param $lhs + * @param $rhs + * @param array $additionalFields + * @return void + */ + protected function removeSelfReferencing($lhs, $rhs, $additionalFields = array()) + { + if ($rhs->id != $lhs->id) + { + $dataToRemove = array( + $this->def['join_key_lhs'] => $rhs->id, + $this->def['join_key_rhs'] => $lhs->id + ); + $this->removeRow($dataToRemove); } } @@ -257,15 +303,7 @@ class M2MRelationship extends SugarRelationship } $rel_table = $this->getRelationshipTable(); - if (!$this->self_referencing) - { - $where = "$rel_table.$knownKey = '{$link->getFocus()->id}'"; - } - else - { - $where = "($rel_table.{$this->def['join_key_rhs']} = '{$link->getFocus()->id}' OR $rel_table.{$this->def['join_key_lhs']} = '{$link->getFocus()->id}')"; - } - $where .= $this->getRoleWhere(); + $where = "$rel_table.$knownKey = '{$link->getFocus()->id}'" . $this->getRoleWhere(); if (empty($params['return_as_array'])) { return "SELECT $targetKey id FROM $rel_table WHERE $where AND deleted=0"; @@ -313,19 +351,9 @@ class M2MRelationship extends SugarRelationship $targetTable = $params['join_table_alias']; } - if (!$this->self_referencing) - { - $join1 = "$startingTable.$startingKey=$joinTable.$startingJoinKey"; - $join2 = "$targetTable.$targetKey=$joinTable.$joinKey"; - $where = ""; - } - else - { - $join1 = "($startingTable.$startingKey=$joinTable.{$this->def['join_key_rhs']} OR $startingTable.$startingKey=$joinTable.{$this->def['join_key_rhs']})"; - $join2 = "($targetTable.$targetKey=$joinTable.{$this->def['join_key_rhs']} OR $targetTable.$targetKey=$joinTable.{$this->def['join_key_rhs']})"; - $where = "(($startingTable.$startingKey=$joinTable.{$this->def['join_key_rhs']} AND $joinTable.{$this->def['join_key_lhs']}='{$link->getFocus()->$targetKey}') OR " - . "($startingTable.$startingKey=$joinTable.{$this->def['join_key_lhs']} AND $joinTable.{$this->def['join_key_rhs']}='{$link->getFocus()->$targetKey}'))"; - } + $join1 = "$startingTable.$startingKey=$joinTable.$startingJoinKey"; + $join2 = "$targetTable.$targetKey=$joinTable.$joinKey"; + $where = ""; //First join the relationship table @@ -377,15 +405,7 @@ class M2MRelationship extends SugarRelationship $joinTable = $params['join_table_link_alias']; } - if (!$this->self_referencing) - { - $where = "$startingTable.$startingKey=$joinTable.$startingJoinKey AND $joinTable.$joinKey='{$link->getFocus()->$targetKey}'"; - } - else - { - $where = "(($startingTable.$startingKey=$joinTable.{$this->def['join_key_rhs']} AND $joinTable.{$this->def['join_key_lhs']}='{$link->getFocus()->$targetKey}') OR " - . "($startingTable.$startingKey=$joinTable.{$this->def['join_key_lhs']} AND $joinTable.{$this->def['join_key_rhs']}='{$link->getFocus()->$targetKey}'))"; - } + $where = "$startingTable.$startingKey=$joinTable.$startingJoinKey AND $joinTable.$joinKey='{$link->getFocus()->$targetKey}'"; //Check if we should ignore the role fileter; $ignoreRole = !empty($params['ignore_role']); diff --git a/data/Relationships/One2MBeanRelationship.php b/data/Relationships/One2MBeanRelationship.php index 79599d3c..899cacaa 100644 --- a/data/Relationships/One2MBeanRelationship.php +++ b/data/Relationships/One2MBeanRelationship.php @@ -124,6 +124,11 @@ class One2MBeanRelationship extends One2MRelationship public function remove($lhs, $rhs, $save = true) { $rhsID = $this->def['rhs_key']; + + //If this relationship has already been removed, we can just return + if ($rhs->$rhsID != $lhs->id) + return; + $rhs->$rhsID = ''; if ($save && !$rhs->deleted) @@ -131,9 +136,7 @@ class One2MBeanRelationship extends One2MRelationship $rhs->in_relationship_update = TRUE; $rhs->save(); } - $rhsID = $this->def['rhs_key']; - $rhs->$rhsID = ''; - + if (empty($_SESSION['disable_workflow']) || $_SESSION['disable_workflow'] != "Yes") { $this->callAfterDelete($lhs, $rhs); @@ -235,7 +238,7 @@ class One2MBeanRelationship extends One2MRelationship //First join the relationship table $join .= "$join_type $targetTableWithAlias ON $startingTable.$startingKey=$targetTable.$targetKey AND $targetTable.deleted=0\n" //Next add any role filters - . $this->getRoleWhere() . "\n"; + . $this->getRoleWhere(($linkIsLHS) ? $targetTable : $startingTable) . "\n"; if($return_array){ return array( @@ -304,4 +307,4 @@ class One2MBeanRelationship extends One2MRelationship else return $this->def['rhs_table']; } -} \ No newline at end of file +} diff --git a/data/Relationships/One2MRelationship.php b/data/Relationships/One2MRelationship.php index 7f5202be..8cb32af6 100644 --- a/data/Relationships/One2MRelationship.php +++ b/data/Relationships/One2MRelationship.php @@ -120,4 +120,20 @@ class One2MRelationship extends M2MRelationship parent::add($lhs, $rhs, $additionalFields); } } + + /** + * Just overriding the function from M2M to prevent it from occuring + */ + protected function addSelfReferencing($lhs, $rhs, $additionalFields = array()) + { + //No opp on One2M. + } + + /** + * Just overriding the function from M2M to prevent it from occuring + */ + protected function removeSelfReferencing($lhs, $rhs, $additionalFields = array()) + { + //No opp on One2M. + } } \ No newline at end of file diff --git a/data/Relationships/One2OneRelationship.php b/data/Relationships/One2OneRelationship.php index da02eb8d..3bb759b2 100644 --- a/data/Relationships/One2OneRelationship.php +++ b/data/Relationships/One2OneRelationship.php @@ -39,7 +39,7 @@ if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); require_once("data/Relationships/SugarRelationship.php"); require_once("data/Relationships/One2MRelationship.php"); -class One2OneRelationship extends One2MRelationship +class One2OneRelationship extends M2MRelationship { public function __construct($def) @@ -54,12 +54,22 @@ class One2OneRelationship extends One2MRelationship */ public function add($lhs, $rhs, $additionalFields = array()) { - $lhsLinkName = $this->lhsLink; - //In a one to one, any existing links from boths sides must be removed first. - //one2Many will take care of the right side, so we'll do the left. - $lhs->load_relationship($lhsLinkName); - $this->removeAll($lhs->$lhsLinkName); + $dataToInsert = $this->getRowToInsert($lhs, $rhs, $additionalFields); + //If the current data matches the existing data, don't do anything + if (!$this->checkExisting($dataToInsert)) + { + $lhsLinkName = $this->lhsLink; + $rhsLinkName = $this->rhsLink; + //In a one to one, any existing links from boths sides must be removed first. + //one2Many will take care of the right side, so we'll do the left. + $lhs->load_relationship($lhsLinkName); + $this->removeAll($lhs->$lhsLinkName); + $rhs->load_relationship($rhsLinkName); + $this->removeAll($rhs->$rhsLinkName); - parent::add($lhs, $rhs, $additionalFields); + parent::add($lhs, $rhs, $additionalFields); + } } + + } \ No newline at end of file diff --git a/data/Relationships/RelationshipFactory.php b/data/Relationships/RelationshipFactory.php index ec2d28f4..d82282b5 100644 --- a/data/Relationships/RelationshipFactory.php +++ b/data/Relationships/RelationshipFactory.php @@ -94,12 +94,18 @@ class SugarRelationshipFactory { switch($type) { case "many-to-many": + if (isset($def['rhs_module']) && $def['rhs_module'] == 'EmailAddresses') + { + require_once("data/Relationships/EmailAddressRelationship.php"); + return new EmailAddressRelationship($def); + } require_once("data/Relationships/M2MRelationship.php"); return new M2MRelationship($def); break; case "one-to-many": require_once("data/Relationships/One2MBeanRelationship.php"); - if (empty($def['true_relationship_type'])){ + //If a relationship has no table or join keys, it must be bean based + if (empty($def['true_relationship_type']) || (empty($def['table']) && empty($def['join_table'])) || empty($def['join_key_rhs'])){ return new One2MBeanRelationship($def); } else { diff --git a/data/Relationships/SugarRelationship.php b/data/Relationships/SugarRelationship.php index dbe24ea2..a1d31819 100644 --- a/data/Relationships/SugarRelationship.php +++ b/data/Relationships/SugarRelationship.php @@ -300,7 +300,10 @@ abstract class SugarRelationship $table = $this->getRelationshipTable(); if (!empty($this->def['relationship_role_column']) && !empty($this->def["relationship_role_column_value"]) && !$ignore_role_filter ) { - $roleCheck = " AND $table.{$this->relationship_role_column}"; + if (empty($table)) + $roleCheck = " AND $this->relationship_role_column"; + else + $roleCheck = " AND $table.{$this->relationship_role_column}"; //role column value. if (empty($this->def['relationship_role_column_value'])) { diff --git a/data/SugarBean.php b/data/SugarBean.php index 22353b4b..84a56c47 100644 --- a/data/SugarBean.php +++ b/data/SugarBean.php @@ -1099,8 +1099,6 @@ class SugarBean { if ($this->load_relationship($name)) { - $GLOBALS['log']->fatal("deleting relationship $name where id is $id"); - $GLOBALS['log']->fatal(get_class($this->$name->getRelationshipObject())); $this->$name->delete($id); } else @@ -1563,6 +1561,11 @@ class SugarBean } + if (empty($GLOBALS['resavingRelatedBeans'])){ + SugarRelationship::resaveRelatedBeans(); + } + + //If we aren't in setup mode and we have a current user and module, then we track if(isset($GLOBALS['current_user']) && isset($this->module_dir)) { @@ -1659,11 +1662,26 @@ class SugarBean $notify_mail->FromName = $from_name; } - $oe = new OutboundEmail(); + $oe = new OutboundEmail(); $oe = $oe->getUserMailerSettings($current_user); //only send if smtp server is defined if($sendEmail){ - if(empty($oe->mail_smtpserver)){ + $smtpVerified = false; + + //first check the user settings + if(!empty($oe->mail_smtpserver)){ + $smtpVerified = true; + } + + //if still not verified, check against the system settings + if (!$smtpVerified){ + $oe = $oe->getSystemMailerSettings(); + if(!empty($oe->mail_smtpserver)){ + $smtpVerified = true; + } + } + //if smtp was not verified against user or system, then do not send out email + if (!$smtpVerified){ $GLOBALS['log']->fatal("Notifications: error sending e-mail, smtp server was not found "); //break out return; @@ -4340,8 +4358,9 @@ function save_relationship_changes($is_update, $exclude=array()) $this->modified_user_id = 1; } $query = "UPDATE $this->table_name set deleted=1 , date_modified = '$date_modified', modified_user_id = '$this->modified_user_id' where id='$id'"; - } else + } else { $query = "UPDATE $this->table_name set deleted=1 , date_modified = '$date_modified' where id='$id'"; + } $this->db->query($query, true,"Error marking record deleted: "); SugarRelationship::resaveRelatedBeans(); diff --git a/files.md5 b/files.md5 index d90c091e..b5f7ef44 100644 --- a/files.md5 +++ b/files.md5 @@ -1,5 +1,5 @@ 'd3f150e4a5bed444763ebe8a81742a95', './.htaccess' => 'd41d8cd98f00b204e9800998ecf8427e', @@ -1170,7 +1170,7 @@ $md5_string = array ( './themes/Sugar5/css/print.css' => '041ba7c460d78a693301c7061139af89', './themes/Sugar5/css/deprecated.css' => '872d2ee2f45eb595825646cb39a82fab', './themes/Sugar5/css/chart.css' => '493edb0e181f685fd595c483d09012fb', - './sugar_version.php' => '8b16921110f80c0ad85d7d8160032e75', + './sugar_version.php' => '4fb7d356c9b21971c7b64fa1943759ae', './soap/SoapTypes.php' => 'f38a0ac79874c8a3e126d728bd05e00a', './soap/SoapSugarUsers.php' => 'aec5ba181325721fa9e6da7e6a787687', './soap/SoapStudio.php' => '2f424bab502055acae4131df64465e0c', @@ -1225,7 +1225,6 @@ $md5_string = array ( './service/core/REST/SugarRest.php' => '7d4f007d66668ca9377fce1f34f94d27', './service/core/PHP5Soap.php' => '598eeeefcc5ed1276020bfe6fa7c4451', './service/core/NusoapSoap.php' => 'e533d700071eafffd2ebfd1e28b2b735', - './vcal_server.php' => '0451673dbbdf49126114fd314ef2a894', './robots.txt' => 'f71d20196d4caf35b6a670db8c70b03d', './removeme.php' => '750092ac2fec3ba2f04f0bff27bec33d', './pdf.php' => 'cc6788d5e02f50b1812ddb2ff3eb3703', @@ -1273,7 +1272,7 @@ $md5_string = array ( './modules/EAPM/EAPM.php' => '9eb7cedb8893fa5bd6eb7d981b054062', './modules/EAPM/CheckLogins.php' => 'db39640dbf662aea7f548788a6eddc92', './modules/vCals/vardefs.php' => '34085f31c8ae80e7ca93127271689e3e', - './modules/vCals/vCal.php' => '47ef1f33681a3e03f01b0007f04d411e', + './modules/vCals/vCal.php' => 'd51b96b678c2fc93c3731eb5d3f5b2ae', './modules/vCals/field_arrays.php' => 'af767daaea141ca2bcf6daa70d9f4da2', './modules/vCals/Server.php' => 'b42524c5bb21266d5911fefe7fd690d2', './modules/vCals/HTTP_WebDAV_Server_vCal.php' => 'a3a618d76c2282378b62ab673e2d3933', @@ -1517,7 +1516,7 @@ $md5_string = array ( './modules/Schedulers/field_arrays.php' => 'd4dd0e9a487e50cc1e3937edf28d4851', './modules/Schedulers/_AddJobsHere.php' => 'a66c4d5dbc4459fe45e4fe0c65cf1cb6', './modules/Schedulers/SchedulerDaemon.php' => '0fe85dd3ab4b9dc4132e0ae782ebce90', - './modules/Schedulers/Scheduler.php' => 'c270773503dfbe2cc9a86f6350ff3137', + './modules/Schedulers/Scheduler.php' => '0a3a0536c9c080a6887eab94fa2cf395', './modules/Schedulers/Scheduled.php' => 'a4f070fb20dde6617eb49fceefbb195f', './modules/Schedulers/Scheduled.html' => '998aaba0c83416168b78a2cc0124d678', './modules/Schedulers/Save.php' => '9ae861c83f40d3ac45083f796b2ac97c', @@ -1807,7 +1806,7 @@ $md5_string = array ( './modules/ModuleBuilder/tpls/resetModule.tpl' => '61597ccd042c1e6ff988fc904e6519ed', './modules/ModuleBuilder/tpls/main.tpl' => '8862d14b4c6989a99013640a9a1f4c02', './modules/ModuleBuilder/tpls/listView.tpl' => '09c1dadffff890544d763bfcd0243465', - './modules/ModuleBuilder/tpls/layoutView.tpl' => '2d9ce0eb871c8ecd7665a3c3580db17b', + './modules/ModuleBuilder/tpls/layoutView.tpl' => '7f4500a6dcc10110b1d79dca9255ca1b', './modules/ModuleBuilder/tpls/labels.tpl' => '61817dbfb8f5e2f55b1d1f32d0fd1e4f', './modules/ModuleBuilder/tpls/index.tpl' => 'f8702ebe45250bb9e72e534e63294b07', './modules/ModuleBuilder/tpls/includes.tpl' => '308f7703d505391d03d58b592c919152', @@ -1861,7 +1860,7 @@ $md5_string = array ( './modules/ModuleBuilder/parsers/relationships/ManyToOneRelationship.php' => 'c39fa6d10c8dca5bac31e8c19243c0f3', './modules/ModuleBuilder/parsers/relationships/ManyToManyRelationship.php' => 'be95f07defab5a0cc9b4a7ed7a17d74f', './modules/ModuleBuilder/parsers/relationships/DeployedRelationships.php' => '9ed7e84ee37eb5f29782aab5c58e8aca', - './modules/ModuleBuilder/parsers/relationships/ActivitiesRelationship.php' => 'd478536f9d79c1e1cb16c558c23ff98e', + './modules/ModuleBuilder/parsers/relationships/ActivitiesRelationship.php' => 'e54641d4126d374f494a6f7f76c2176b', './modules/ModuleBuilder/parsers/relationships/AbstractRelationships.php' => '136c576c10bdf9964e51fd9164e60736', './modules/ModuleBuilder/parsers/relationships/AbstractRelationship.php' => '870ead52b543485edc8235a0695adb10', './modules/ModuleBuilder/parsers/parser.modifysubpanel.php' => 'b26c368fe0ded3b67f1d83f33795454b', @@ -1948,13 +1947,14 @@ $md5_string = array ( './modules/Meetings/SubPanelViewInvitees.php' => 'eb9e848e7686ab8ef26c07fee3c8a269', './modules/Meetings/SubPanelViewInvitees.html' => 'f3f1c069759034d89adefd17350a31ed', './modules/Meetings/Save.php' => '5e6ee92cd4d33c083492e54940b58264', - './modules/Meetings/Menu.php' => '0d870e1dff0f49a2a84f4b65d50bbc89', + './modules/Meetings/Menu.php' => '20e69d57b747825c30e86987d72efb0b', './modules/Meetings/MeetingsQuickCreate.php' => '818e55e261c5e74cb385f835311944fa', - './modules/Meetings/MeetingFormBase.php' => '3d15b0c970848917b794542f6b460aa6', + './modules/Meetings/MeetingFormBase.php' => 'b61408cf610f01009b415060e2ba6ada', './modules/Meetings/Meeting.php' => 'bef7ab954e9880ba77e9ce5350454758', './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.php' => '16fb96bf96a256841f23b5181e9643bd', './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.meta.php' => 'e47f5ffe63b5a0fa7d7de49e41602428', './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.data.php' => '93411ffd890d557e5f97ed68b946f097', + './modules/MailMerge/controller.php' => 'c79ad5d86aa43cca68f927a8ad51502b', './modules/MailMerge/modules_array.php' => 'af9991bc9b3ff44c85e1b3f7b58999b0', './modules/MailMerge/language/en_us.lang.php' => '3b63d532d3c99f4a1335cd336b7601d6', './modules/MailMerge/index.php' => '21076a939d7bf08f11baf16d6d625a9a', @@ -1966,8 +1966,8 @@ $md5_string = array ( './modules/MailMerge/Step3.php' => 'bfbc79b0927f0b615963d1118b96ddba', './modules/MailMerge/Step3.html' => '24d26c3c8eb46ded0f2adad4da479fea', './modules/MailMerge/Step2.php' => '6eff88823954aa10701d0c8526005868', - './modules/MailMerge/Step2.html' => '37f07d70fb1a00a8ccb77eb526b75458', - './modules/MailMerge/Step1.php' => 'f6ddfe7ec04be708a4b6251c25b1bd95', + './modules/MailMerge/Step2.html' => '941bce24918815a508be168f48dbb454', + './modules/MailMerge/Step1.php' => '2917edb58f1a61d7ab3574cc1d5547b7', './modules/MailMerge/Step1.html' => 'e47775cad8089fafc1ff8102632c9ab8', './modules/MailMerge/Save.php' => '6d3ccf9c3fc315c2001314975d9718fb', './modules/MailMerge/Merge.php' => '07e613e34ed6d04437345d6c8149f2b3', @@ -1984,7 +1984,7 @@ $md5_string = array ( './modules/Leads/tpls/DetailViewHeader.tpl' => 'ff0301b5f7beef3671e1174a249048ba', './modules/Leads/tpls/ConvertLeadHeader.tpl' => '61fc0715b9ebf43c569e137e1d4270ee', './modules/Leads/tpls/ConvertLeadFooter.tpl' => 'c61ad4ca2bcae0bb13202c378d295b9c', - './modules/Leads/tpls/ConvertLead.tpl' => '23d924f4d2b883d6de840d004335d761', + './modules/Leads/tpls/ConvertLead.tpl' => 'fe03fd52fd77c0351cff32c17c77838b', './modules/Leads/metadata/subpanels/default.php' => 'd10b56acc074aefcad6ee5fb27eb436d', './modules/Leads/metadata/subpanels/ForMeetings.php' => '7c73f4dc11531df7da6e6df7cbc24b20', './modules/Leads/metadata/subpanels/ForEmails.php' => '1b38f45c8243ce013ee7b03560d4a3b6', @@ -2107,7 +2107,7 @@ $md5_string = array ( './modules/Home/dashlets.php' => 'a88f1d512af748e1a4aa34bfdb34f883', './modules/Home/UnifiedSearchAdvancedResults.tpl' => 'd42129025349ee2e90013328973cad03', './modules/Home/UnifiedSearchAdvancedForm.tpl' => '69e1fc48e68332a049be43ba4d09eec1', - './modules/Home/index.php' => '599ce66c054f5676ae0e1575f20aad54', + './modules/Home/index.php' => 'bd9e3455c871b17b13c7d1a7b34c3af9', './modules/Home/UnifiedSearchAdvanced.tpl' => '4d77c658b82caabfe76d1e9e6aab7249', './modules/Home/UnifiedSearchAdvanced.php' => '1a9ae3dd850dbd0ec8947caf548e01b1', './modules/Home/TrainingPortal.tpl' => '484626736f0965c1c08cc8448f9f66f6', @@ -2195,8 +2195,9 @@ $md5_string = array ( './modules/Employees/Menu.php' => 'd243cd0453202d101d515f3337d786e3', './modules/Employees/Forms.php' => 'dcb0eca9d5e3c8d92c17b66976ddcf13', './modules/Employees/Error.php' => 'ce78eb822cb1508b923493e55f053122', - './modules/Employees/Save.php' => 'c40cd43574e4999569ab04c5c1ba2434', + './modules/Employees/Save.php' => '0a02115ace66b8d69960b0d4660fdfa3', './modules/Employees/Employee.php' => '19d7b5023b16ca97b1f4f3dde4b485b7', + './modules/Emails/EditView.html' => '5b89afe8cc863a6828fe770a943d86b7', './modules/Emails/views/view.quickcreate.php' => '1baef44186ab0bc84e3d575c5537ccb5', './modules/Emails/views/view.modulelistmenu.php' => '647ceefc2936595192f0683ff27ce3d2', './modules/Emails/views/view.classic.config.php' => '1117f98347ee9338dd7887db4119ed7f', @@ -2225,7 +2226,7 @@ $md5_string = array ( './modules/Emails/templates/_createGroupFolder.tpl' => 'cd83288c1c4714252edfa78e85e390e6', './modules/Emails/templates/_blank.html' => '157012881cfc6fc266ec89296183b9e7', './modules/Emails/templates/_baseJsVars.tpl' => 'b3d376ef9423fa35c9ce6c2ac1698716', - './modules/Emails/templates/_baseEmail.tpl' => '7a8e6cc0f553f7a5c1139cf5dab68a08', + './modules/Emails/templates/_baseEmail.tpl' => 'a3c0a8d9f4a82ec3a542e92170932bc1', './modules/Emails/templates/_baseConfigData.tpl' => 'aa16b451f37ce04532f80175482ec87d', './modules/Emails/subpanels/ForUsers.php' => '9489a5ea6ed330d2cc068fbc0c35d00c', './modules/Emails/subpanels/ForQueues.php' => '0b2af9f4ecba910a48c51b4f3bf30455', @@ -2251,9 +2252,9 @@ $md5_string = array ( './modules/Emails/javascript/complexLayout.js' => 'fbcdb2d153ed8d495d095067ac792a47', './modules/Emails/javascript/ajax.js' => 'c79464f6d7676ebe7b738945b18784b7', './modules/Emails/javascript/EmailUIShared.js' => 'df6ecb98436f9ca8186106b9a4496dbf', - './modules/Emails/javascript/EmailUICompose.js' => '934ef5a1fc6856eb36853fe157982b98', + './modules/Emails/javascript/EmailUICompose.js' => '3ff124311b25da3a4d1e8aa4e1bd04ff', './modules/Emails/javascript/EmailUI.js' => 'd75abb223151ed6ca82de6d342464cf0', - './modules/Emails/javascript/Email.js' => 'a982453de0345d99f2deba12c20cc985', + './modules/Emails/javascript/Email.js' => '0d9490a7067d54a473d33999e04876a6', './modules/Emails/index.php' => '6aff206a9821e1259275602982d900b8', './modules/Emails/images/sugarGroup.gif' => 'ad21210176b6a2a10a7a9b8f876ad83b', './modules/Emails/images/sugarDynamic.gif' => '82285d963771975b2def7f19e6438a8c', @@ -2276,7 +2277,6 @@ $md5_string = array ( './modules/Emails/SearchFormMyInbox.html' => 'aa22a1b305bade600c30cb3e9f8885d2', './modules/Emails/SearchFormGroupInbox.html' => '4b2f99a5397e5f07fdc500d621cc23da', './modules/Emails/SearchForm.html' => '60561bf737698077131d1adc93936b01', - './modules/Emails/Save.php' => 'a705062f91571a2606e9f4362493fbda', './modules/Emails/Popup_picker.php' => '0a565ac706b2a2adba1a92e451e2861b', './modules/Emails/Popup_picker.html' => 'e1007fcf6df3f84a04b243925f2ab397', './modules/Emails/PopupDocuments.php' => '620740641da9b96fb68e4331a89d7072', @@ -2294,13 +2294,13 @@ $md5_string = array ( './modules/Emails/ListViewDrafts.html' => 'f2596e8874ce149f0849ba620a47059e', './modules/Emails/Grab.php' => '1a2ae928706722eb9f4c7ffb4d975d88', './modules/Emails/GenerateQuickComposeFrame.php' => '9fa2162d2750f8dbc20a705909c353b3', + './modules/Emails/Save.php' => 'a705062f91571a2606e9f4362493fbda', './modules/Emails/EmailUIAjax.php' => '9f1ccc5be981ff3803f5f7407f8bed72', './modules/Emails/EmailUI.php' => '4a84724f5f101fcd4e9f2e5a4ba360e5', './modules/Emails/EmailUI.css' => '6f93388627148bdc54c9458c434d7ec1', './modules/Emails/Email.php' => '5ecad39b7090543d1f45be10159cb056', - './modules/Emails/EditViewArchive.html' => '25eb0b586a4366ab88ec87086d681fa9', - './modules/Emails/EditView.php' => 'fcbc711347a7945dcb2ff966748bab51', - './modules/Emails/EditView.html' => '5b89afe8cc863a6828fe770a943d86b7', + './modules/Emails/EditViewArchive.html' => '2d88389d7dbe10281c731cc757373cea', + './modules/Emails/EditView.php' => '6db8f3c72668df76eb17d37b3a32de23', './modules/Emails/DetailViewSent.html' => '7b12fdf44a8a0acde69e36fa0341e149', './modules/Emails/DetailView.php' => 'a6ca96cb85ff388b617d17c23f4dc777', './modules/Emails/DetailView.html' => 'ec09f0f79d1361e5c6a372551ae55a9e', @@ -2444,12 +2444,12 @@ $md5_string = array ( './modules/DynamicFields/FieldViewer.php' => '53f662eab9401fd5a0b9f90c035fb13a', './modules/DynamicFields/FieldCases.php' => '7e9c75d4fcefca29f24033a0e8687f3c', './modules/DynamicFields/DynamicField.php' => 'fcb8b4ff8b8a3e6f031119d66feab21c', - './modules/Documents/documents.js' => '27b2aedb1597d9f13ee4410d295e45bd', + './modules/Documents/documents.js' => '8b00857d6e7b1f8dd1dbfbe68a6dee47', './modules/Documents/tpls/view.extdoc.tpl' => '9471a4d4ef93987e9b646f79591b2bc6', './modules/Documents/action_view_map.php' => '0994fe5e38b73c985fff200f9edb2129', './modules/Documents/DocumentExternalApiDropDown.php' => '05c03dc10f85d98ddc4c512d809f886a', './modules/Documents/views/view.extdoc.php' => '3348a550e4e6a7d4e4ed7712a5cf74af', - './modules/Documents/views/view.edit.php' => 'a428296858015ae9aa9722a58f579015', + './modules/Documents/views/view.edit.php' => 'a6f35bc369a8d00cd6905212170b1ad2', './modules/Documents/views/view.detail.php' => 'e304a2abe7de36903ff6326746313616', './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.php' => '35404688fc59eb3737d89ca7432c3e76', './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.meta.php' => '0fd71adbdb97e05acfa9e37f517fd47b', @@ -2460,7 +2460,7 @@ $md5_string = array ( './modules/Documents/metadata/subpaneldefs.php' => '70dd233ce8f24edeb4b54a39185d5562', './modules/Documents/metadata/studio.php' => '1f3e1f9c3a457e502635fd5a1d53861d', './modules/Documents/metadata/searchdefs.php' => 'd344cdfeb46470a1575e7a0fa752eef9', - './modules/Documents/metadata/quickcreatedefs.php' => '02704d65e6a132a77c09e0e50fd7eff2', + './modules/Documents/metadata/quickcreatedefs.php' => 'a8ad52550cb874baeb11ee116744c03a', './modules/Documents/metadata/listviewdefs.php' => '219bcfc1e773eedfd3675265ef002ff3', './modules/Documents/metadata/editviewdefs.php' => '4f1da2538866a0ea01796778c9a9105a', './modules/Documents/metadata/detailviewdefs.php' => '1f005a55b5bce7e42d4f5598b2ff06f2', @@ -2619,9 +2619,9 @@ $md5_string = array ( './modules/Configurator/tpls/addFontResult.tpl' => '1e1475a7d057504ba22a4a30b65b6c36', './modules/Configurator/tpls/SugarpdfSettingsFields.tpl' => '80235a1d08cf36c5dfbd79c7de7152e8', './modules/Configurator/tpls/SugarpdfSettings.tpl' => 'd283c244e66075367faef6cbc01f3459', - './modules/Configurator/tpls/EditView.tpl' => '3a818ce7946c6cf6cafe44b5dce70390', + './modules/Configurator/tpls/EditView.tpl' => 'db9ac4b818e9c65d854cdeb38204c526', './modules/Configurator/metadata/SugarpdfSettingsdefs.php' => 'df5f687816312360b828d6d9efab2b71', - './modules/Configurator/language/en_us.lang.php' => '11eece4d53d2d8c2a2bd3c1100ccb089', + './modules/Configurator/language/en_us.lang.php' => 'd2c0d469744d4ddb84026db3ba6377c2', './modules/Configurator/controller.php' => '9bac915d2f58d514b3bdf6e9bcee9548', './modules/Configurator/UploadFileCheck.php' => 'a3d6615e316e2b631b800c68c066d608', './modules/Configurator/action_view_map.php' => 'ba2dd628e87ce08422e8854993f3fb5c', @@ -2827,7 +2827,7 @@ $md5_string = array ( './modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.data.php' => '577c8b018b6249972abd8ce81061c6af', './modules/Calls/CallsQuickCreate.php' => '1a526db285df01bcdda25ef861e25323', './modules/Calls/CallHelper.php' => '821c104aef4b2d64666fa94bb7cf7d88', - './modules/Calls/CallFormBase.php' => '2e5fcdaab68696dc8a150c667bf127e5', + './modules/Calls/CallFormBase.php' => '8886ec2adfcadef1faabf74d15e9454f', './modules/Calls/Call.php' => 'bd5f425b01552ef227168f60a398e618', './modules/Calendar/views/view.list.php' => 'e8dd64409e0ac2eacd506fcb7bb81fd9', './modules/Calendar/templates/templates_calendar.php' => 'a6b1f92745bd8921e9a3522a54b2ef9e', @@ -2888,7 +2888,7 @@ $md5_string = array ( './modules/Administration/undoupdateclass.php' => 'a05857b2a437d34e52a377bbfca08ca3', './modules/Administration/templates/Languages.tpl' => 'f2115e30b05bd5ffd32b42284b5a3b5f', './modules/Administration/templates/GlobalSearchSettings.tpl' => '7872194b872c6bf46965e7c7b006e52e', - './modules/Administration/templates/ConfigureAjaxUI.tpl' => '9094114244981c328b5fa07933ecac37', + './modules/Administration/templates/ConfigureAjaxUI.tpl' => '92e9d52c8becb9acea3ad80d077b3757', './modules/Administration/templates/themeSettings.tpl' => '80eef5be21cbff2a9e80e1bd33cd7d02', './modules/Administration/templates/ShortcutBar.tpl' => '0d2c2e9b5e15a1528e97fad95cace190', './modules/Administration/templates/RepairXSS.tpl' => 'cbf0b5ede9e0f8ff598cf3e9c3dbef9b', @@ -2897,33 +2897,31 @@ $md5_string = array ( './modules/Administration/templates/ConfigureTabs.tpl' => 'ef345ff226a317b2c66027d1d5e78e2d', './modules/Administration/repairSelectModule.php' => 'a7af51a5f7f6e5002f4963b80504c0d8', './modules/Administration/ncc_config.php' => '6fcf1f7bd93acbf9b0c7b3a890bdab9d', - './modules/Administration/metadata/adminpaneldefs.php' => '9de708377517e222178ee27837d484ef', + './modules/Administration/metadata/adminpaneldefs.php' => '648fd0de7e3a0188a621c14dac1b8f12', './modules/Administration/metadata/SearchFields.php' => '6968a40d78da694e44829ec8d00645e8', - './modules/Administration/language/en_us.lang.php' => 'f7d076b47ec630ffd057a5822841b2d2', + './modules/Administration/language/en_us.lang.php' => '0686080b0de6663c5161d81066c3471a', './modules/Administration/javascript/Administration.js' => '5c983c8146d2f8e537f0f826d0239834', './modules/Administration/javascript/Async.js' => '6201560d3cc38a32a3300606bce92541', './modules/Administration/index.html' => '2cc05387b7f392ee9891f97ff24e8f66', - './modules/Administration/Diagnostic.tpl' => 'a46eed78fd43c51c6df8e3e6a0e7ae86', - './modules/Administration/DstFix.php' => '3c1cfac3316ffc8ebfd4ecda81ca40f0', './modules/Administration/callJSRepair.php' => '097ad94cdd7cddd45fe0f247df360f26', './modules/Administration/repairUniSearch.php' => 'e25cdf52b928d0ea05e4a2b25acf8a66', './modules/Administration/clear_chart_cache.php' => '95585a99d6928cc158475308324e8270', + './modules/Administration/Diagnostic.tpl' => 'a46eed78fd43c51c6df8e3e6a0e7ae86', './modules/Administration/UpgradeWizard_prepare.php' => 'fcd2cd294ca89b83d07b6ab1320be5e8', './modules/Administration/UpgradeWizard_commit.php' => '79b11156566b725fcfc3ef0a6e654e23', - './modules/Administration/UpgradeWizard.php' => '84fba3fca2c46fd23c0fd2fbc63aec78', './modules/Administration/UpgradeIISAccess.php' => '06edbb4c220390310e11109e8f3385a7', - './modules/Administration/vardefs.php' => '8f61a204bacb7e18c17ea94e6eabde77', + './modules/Administration/DstFix.php' => '3c1cfac3316ffc8ebfd4ecda81ca40f0', + './modules/Administration/UpgradeWizard.php' => '84fba3fca2c46fd23c0fd2fbc63aec78', './modules/Administration/updater_utils.php' => '4cc174956a5791243e839c6b74e148cb', './modules/Administration/UpgradeFields.php' => '6ec4328aa4888703fc800ed61dcf56de', './modules/Administration/UpgradeAccess.php' => 'd5b662f01ae6c5a8ec6ef7f7cfa6e4cd', './modules/Administration/expandDatabase.php' => 'db6782337c424a5aea39932c6c74b52a', './modules/Administration/UpgradeWizardCommon.php' => 'd6c694064904b67eaefdef81b4912b97', './modules/Administration/SupportPortal.tpl' => '25d5c2ffefc8becee74e0f45b196ca64', - './modules/Administration/index.tpl' => '1dbbee4c2ea3662b4416bbe4308ede53', - './modules/Administration/repairDatabase.php' => '8de7ecd350e5516b099fa6dd0f0bfecd', + './modules/Administration/repairDatabase.php' => '93351ceaf8e7f5ec08cefd888b64f1ec', './modules/Administration/Save.php' => '4152bf2003831091369d76b24495386f', - './modules/Administration/index.php' => '838b3b9755958147fdf7f6adabe3f8e1', - './modules/Administration/controller.php' => '2c8fd38db9283dfa9f539eceffc59c78', + './modules/Administration/vardefs.php' => '8f61a204bacb7e18c17ea94e6eabde77', + './modules/Administration/controller.php' => 'dca978db03b55d5d218dc282b9c9f31b', './modules/Administration/RepairSeedUsers.php' => 'b9c8937676633e2860b38b3c5ab77f0c', './modules/Administration/RepairJSFile.php' => '43ac52009b5ee4364b2194b7d672d740', './modules/Administration/RepairXSS.php' => '2d56fb5ebf47019f684ddc0329d4ffa5', @@ -2931,7 +2929,7 @@ $md5_string = array ( './modules/Administration/action_view_map.php' => '8ba9b78bb24fa0122befa97b20dcc591', './modules/Administration/UpgradeHistory.php' => 'c1cfbee38c2d4c00bfcd97f79dda267c', './modules/Administration/RebuildSchedulers.php' => '87ba4d901c73481d50e7f43aa526c5c3', - './modules/Administration/RebuildRelationship.php' => '5d37c220194dd2e953805340355ca798', + './modules/Administration/RebuildRelationship.php' => '7f31de7a2d87ab7072e5df84fce8c48d', './modules/Administration/RebuildJSLang.php' => 'a4dfe8f0964eca2d257a9719aad729bc', './modules/Administration/RebuildFulltextIndices.php' => 'e86776d7b093bfc168937773bf5e100e', './modules/Administration/RebuildExpressionPlugins.php' => '6af6f4d78936ff68209e410f5fb45601', @@ -2941,8 +2939,8 @@ $md5_string = array ( './modules/Administration/RebuildAudit.php' => '8d2fc35c83a49c038ca59d7ef54149b2', './modules/Administration/QuickRepairAndRebuild.php' => '745b5aa563e14810a4e0c51885aff222', './modules/Administration/PasswordManager.tpl' => 'd60c9df9a4d6cf63168fefa53f9b07de', - './modules/Administration/Upgrade.php' => '595882b60b47ea6b775205823044dcb4', - './modules/Administration/Updater.php' => '6245521e1b0c45638d1fd5cfc3fea19b', + './modules/Administration/index.tpl' => '1dbbee4c2ea3662b4416bbe4308ede53', + './modules/Administration/index.php' => '838b3b9755958147fdf7f6adabe3f8e1', './modules/Administration/SupportPortal.php' => '05c3bcc46d9ac6f3159861d398b15409', './modules/Administration/Menu.php' => '96b575a9cdd9b92b4411aa316f57d1a3', './modules/Administration/RepairIndex.php' => 'cdc4da4fec0cef9a351dec1e7aa75f33', @@ -2951,6 +2949,8 @@ $md5_string = array ( './modules/Administration/PasswordManager.php' => '6e3ca5f53adbb0144bf4f053671cf45d', './modules/Administration/ImportCustomFieldStructure.php' => '8f483d883bfa449cce0ca0afe782b6cc', './modules/Administration/Forms.php' => 'fb76fa135d6210b0e25abf6b2f10376d', + './modules/Administration/Upgrade.php' => '595882b60b47ea6b775205823044dcb4', + './modules/Administration/Updater.php' => '6245521e1b0c45638d1fd5cfc3fea19b', './modules/Administration/Locale.tpl' => 'c84e7541508099330a44296d460fabaf', './modules/Administration/ExportCustomFieldStructure.php' => '6f55e973d20ab72b29f0fc74d793ad5b', './modules/Administration/DisplayWarnings.php' => '70d6a5d17f5690de605ec1b11bf75781', @@ -3122,7 +3122,7 @@ $md5_string = array ( './metadata/accounts_contactsMetaData.php' => '7ac2dc92952f26414bcc626ca70b164e', './metadata/accounts_casesMetaData.php' => 'fd6eda9449e9c52ee7b3cf345dd146da', './metadata/accounts_bugsMetaData.php' => '8adc9eae86555b17c88306b540f4467f', - './maintenance.php' => '72efcf842406e81fb8640a621afbdd68', + './vcal_server.php' => '0451673dbbdf49126114fd314ef2a894', './log_file_restricted.html' => 'f20a0bfe3ac44ba88f520fb8203a70e4', './log4php/LoggerManager.php' => 'fa34194306cd50c01b71d8d5060ee362', './leadCapture.php' => '39f9c34cbfb01f585a6c04227823c65f', @@ -3134,7 +3134,7 @@ $md5_string = array ( './jssource/src_files/include/SugarCharts/Jit/js/mySugarCharts.js' => 'bb8a2f5badbe46e22e07933cc66c2fff', './jssource/src_files/include/SugarCharts/Jit/js/sugarCharts.js' => '72eba4ec918665ffa582c6fec16d2c78', './jssource/src_files/include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => '82905de42674faa12e819f99d3db0610', - './jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js' => '9212e7c63d82563e1db10bc97346e4cd', + './jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js' => '17fe30351724157bb2378d4accd1afaa', './jssource/src_files/include/SugarFields/Fields/Address/SugarFieldAddress.js' => '05610c1f440fc0dd6de61b3ae1154aaf', './jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'd0c3a690789d94d4b5d88bf99abdd3d0', './jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => '7f93acedc02d390800eaad0e5fc22cae', @@ -3143,17 +3143,17 @@ $md5_string = array ( './jssource/src_files/include/javascript/cookie.js' => '4edb43519c5ac8c3d9b1b73b9ddf87fb', './jssource/src_files/include/javascript/dashlets.js' => 'c85774c7bcc3568d50e71448dbb371af', './jssource/src_files/include/javascript/include.js' => '569fbc452038128da8111871d9094ed5', - './jssource/src_files/include/javascript/jsclass_async.js' => '62999963ba1982cc5582cd0c89d509f3', + './jssource/src_files/include/javascript/jsclass_async.js' => '7a93ad9d1cbd16d4a4fa04bda28483bf', './jssource/src_files/include/javascript/jsclass_base.js' => 'ef96b7ba20a601f2fed2ff94f1cb0eb0', './jssource/src_files/include/javascript/menu.js' => 'a12b42e2406a9b192609258884536efd', './jssource/src_files/include/javascript/overlibmws.js' => 'baaf046aa93f29e370d17b31e0d66e16', './jssource/src_files/include/javascript/overlibmws_iframe.js' => 'b250fc67fe7d6812a41b528ac39083bc', './jssource/src_files/include/javascript/popup_helper.js' => '6be37795c9d2b6a5c99d210f84731324', './jssource/src_files/include/javascript/popup_parent_helper.js' => '41624ffc3d0b63a35832775a09b24bc3', - './jssource/src_files/include/javascript/quickCompose.js' => '6c27b841e150583a5c55c354081cfac0', + './jssource/src_files/include/javascript/quickCompose.js' => 'fa983d3c19912b130583a15387fa5e6c', './jssource/src_files/include/javascript/quicksearch.js' => 'b95bea8ff6622dc39b84dad7acc25d18', './jssource/src_files/include/javascript/report_additionals.js' => '134d3cd895ad1e0470f9dd07c7b34ad1', - './jssource/src_files/include/javascript/sugar_3.js' => '128009fec982eddf61fcdd0087f1fcea', + './jssource/src_files/include/javascript/sugar_3.js' => '70e12eb3b9411ffaf24e6d5d292e1bb0', './jssource/src_files/include/javascript/sugar_connection_event_listener.js' => '60c2a539c4e42bbd9c9e8fa5ca3dfd72', './jssource/src_files/include/javascript/sugarwidgets/SugarYUILoader.js' => '9237f12850b7ce5c27669480f71152be', './jssource/src_files/include/javascript/sugarwidgets/SugarYUIWidgets.js' => '5cb3faa95abcca01241a06c46cc609e0', @@ -3919,7 +3919,7 @@ $md5_string = array ( './jssource/src_files/include/javascript/yui3/build/widget-anim/widget-anim.js' => '73dda979e61a729d65d9fde370194b70', './jssource/src_files/include/javascript/yui3/build/yql/yql-min.js' => '9d94bc7ae9cf56021a5dc3f454a5b8bb', './jssource/src_files/include/javascript/yui3/build/yql/yql.js' => 'e1a2b802089686337415bcbdc54c23f6', - './jssource/src_files/include/javascript/ajaxUI.js' => '25b091acc3b5edefd3ca40aa0fce3568', + './jssource/src_files/include/javascript/ajaxUI.js' => '02f82d35d2353372ba7c33a68491a5b1', './jssource/src_files/include/javascript/calendar.js' => 'da8f5fca74acc32edff682b17c8662e5', './jssource/src_files/include/javascript/importWizard.js' => '5473123f038ab6e27a335c7630035c77', './jssource/src_files/include/javascript/iscroll.js' => 'b6c232e3c54b2a1320b22c7ad920c842', @@ -3955,7 +3955,7 @@ $md5_string = array ( './jssource/src_files/modules/Connectors/Connector.js' => '8a297fca0ea108c6a5edb100eafd8432', './jssource/src_files/modules/Contacts/Contact.js' => 'f66093ba1e4899fe3daf18956d8b5e38', './jssource/src_files/modules/Currencies/EditView.js' => '22d07408e9aa6d940e0783147859b013', - './jssource/src_files/modules/Documents/documents.js' => 'ff0093f68d68b7cc0e864e28b6aac4c7', + './jssource/src_files/modules/Documents/documents.js' => '5110ec40afe540ecd0bd44dfe41176e8', './jssource/src_files/modules/EmailTemplates/EmailTemplate.js' => 'b7a20a46340cb552cb0600dc4bc37f23', './jssource/src_files/modules/Home/about.js' => '3c3184898479de9affd42a03e8db87a3', './jssource/src_files/modules/InboundEmail/InboundEmail.js' => '3853f33e9a0a903d50e2c110be0c9f25', @@ -3982,7 +3982,7 @@ $md5_string = array ( './jssource/minify.php' => '219023f793e8ed83e536771bffcd988c', './jssource/jsmin.php' => '1ab5658de8334b5200dd571b4f9fb318', './jssource/JSGroupings.php' => 'b2b9a0828ab785f9e94eca80190cdb59', - './json.php' => '7c4686a02553172c041fb5f48152ed51', + './maintenance.php' => '72efcf842406e81fb8640a621afbdd68', './install/dbConfig.js' => '34408e61d47a775a3cb67971bb710522', './install/installCommon.js' => '9177e605553bb2a6619179d0e5dffc57', './install/license.js' => '7e1c720dd7e26e4e844cd21d704f9ddd', @@ -4001,7 +4001,7 @@ $md5_string = array ( './install/siteConfig_a.php' => '17e8c6a41d5f4d3469e123ee98f93f7d', './install/licensePrint.php' => 'f569be1d51e52d0067ec1b2845a4c9b1', './install/license.php' => '6739f461680a5a40971d83bc7b66b7ef', - './install/language/en_us.lang.php' => 'd02a4a59e82866663abf9f9cf0c577eb', + './install/language/en_us.lang.php' => '9ce2da4eac16c33d493b2c7981cfaf18', './install/performSetup.php' => '11f7040bb3cded1e462fdde6dab11807', './install/install_defaults.php' => '3c67b082c1709e909dd1aaf051e9c589', './install/installType.php' => 'cc447dd870b6eb51027abeb4d4674087', @@ -4017,7 +4017,7 @@ $md5_string = array ( './install/dbConfig_a.php' => 'ea11513c27fe2c5cdc0241a1fe744cfb', './install/data/disc_client.php' => 'e4574285e612f49e6a5b002e3bf0b6c9', './install/confirmSettings.php' => '44341f2a4081476ef4afbfa8c28754c7', - './install/checkDBSettings.php' => 'a71be2058378c686abd7a54bd33ce171', + './install/checkDBSettings.php' => '5b5e8721730cd6f5b1097869a6dc9541', './install/UserDemoData.php' => '50640057634782bb6f0cf4e34313346c', './install/UploadLangFileCheck.php' => '011b7ae7a9711e6eb231155e24c66e63', './install/TeamDemoData.php' => '1cf512bcb6834cdac2c154b2f42d14cd', @@ -4110,12 +4110,12 @@ $md5_string = array ( './include/utils/progress_bar_utils.php' => 'c38627c8c832e31a0f524151491efbb5', './include/utils/zip_utils.php' => '8b0e9094a1a418d1d0dacfd58620d704', './include/utils/logic_utils.php' => '34cee1496e20f3eee7ae4ad76e5e14c5', - './include/utils/layout_utils.php' => '75eb098db6333d6f498ec8948d6d392d', + './include/utils/layout_utils.php' => '402a7ef6e0970a5a80b2d8e3b89df84d', './include/utils/file_utils.php' => '9fba4b2638aa5aff8259020d7dc764e7', './include/utils/external_cache.php' => '4138cf307fea4ca68817b4c80250cab0', - './include/utils/mvc_utils.php' => '8db526104fff041d24100a65fde10c76', + './include/utils/mvc_utils.php' => '5c7bb822f26333911ba06195cee895ed', './include/utils/encryption_utils.php' => '060b4fa727c1d48fa8ec2809e2fb58cf', - './include/utils/db_utils.php' => '644b02b4ed5db4a3ede75ed11368b773', + './include/utils/db_utils.php' => '9b3d1516d07438b8cac025baf539fcc0', './include/utils/autoloader.php' => '684b00fa5ca181b4f5635334099d24c0', './include/utils/array_utils.php' => '4a63065e0ab62bfc33b9429f886ed7ec', './include/utils/activity_utils.php' => '96a8bd8977d5e7532e3b7d8ca3a583ee', @@ -4218,34 +4218,34 @@ $md5_string = array ( './include/modules.php' => 'a53c422cdfc87ac293a02c9d99ad691b', './include/language/jsLanguage.php' => 'e5d77d52c812648dc2be7791531be294', './include/language/en_us.notify_template.html' => '4e90b0343ac29bf12687dddb15afea7d', - './include/language/en_us.lang.php' => '22c01864c39d1ec0d71cfb509372018d', + './include/language/en_us.lang.php' => '391a90cc7281734776b772a141651463', './include/json_config.php' => '73219c3de81147aa2e18580b497353e6', - './include/javascript/sugar_grp_jsolait.js' => 'f0cc8c61a300a74340d3fcc6b1a2c955', - './include/javascript/sugar_grp_quickcomp.js' => 'e8c53f25613812df96d7886166380194', - './include/javascript/sugar_grp_emails.js' => 'fe20921ee672b157786f86ebcb03b373', + './include/javascript/sugar_grp_jsolait.js' => '1973cfddc881389c419c06a0dd9e7182', + './include/javascript/sugar_grp_quickcomp.js' => 'd71dc5da0d349aabe40ce1a555f43290', + './include/javascript/sugar_grp_emails.js' => 'b5789aef89dc5d468fb6a0d9fa31d4c6', './include/javascript/sugar_grp_overlib.js' => 'd1af18f5bf386f5b208e467e6e22e46f', './include/javascript/sugar_grp_yui2.js' => '613bb6a5e0e5e934a88293f6ae2ffa43', './include/javascript/sugar_grp_yui_widgets.css' => '87d9287720879ff935fa2b80690ede5e', './include/javascript/sugar_grp_yui_widgets.js' => 'f7562f8ff8bff22cf193a9d212b6bf29', './include/javascript/sugar_grp1_yui.js' => 'e98c92b5f0c4285764d85aa04b32da8a', - './include/javascript/sugar_grp1.js' => 'fdb1da9a96b7d5ed55cd999656b1194f', + './include/javascript/sugar_grp1.js' => '017cdffaaff73f619872a1d2f59f87e5', './include/javascript/cookie.js' => '4f95a2872a549573149d035633086662', './include/javascript/dashlets.js' => '208d5f32d367390faadda8e899f99b77', './include/javascript/include.js' => '278e187b101eb3a5871f3bce021cdb62', - './include/javascript/jsclass_async.js' => 'c915de28d467e6a5c715fa8a60f9aa6b', + './include/javascript/jsclass_async.js' => '7d4d4d9f2f5eed09baa7503e4e43dabc', './include/javascript/jsclass_base.js' => 'a13cae0c604a511e4cf2e9eb6150e029', './include/javascript/menu.js' => 'bab1eb80c6cf5cb048efc10e9eec8aaf', './include/javascript/overlibmws.js' => '66a898aad7f5de44cae6d97016ae91dd', './include/javascript/overlibmws_iframe.js' => 'aae059277f699dde6451e92c51a3746d', './include/javascript/popup_helper.js' => '624081de798ef3e853c67d06a1b422b7', './include/javascript/popup_parent_helper.js' => '92dfee2b7bf6f56ab176ac8f0d0d672b', - './include/javascript/quickCompose.js' => 'bc5a17c459b7aa8d6ca62b4a88d0509a', + './include/javascript/quickCompose.js' => 'd5ea61432b8795e0d25d1bc606ea5a51', './include/javascript/quicksearch.js' => '766053dbb28ec36768a7aece97faa4f0', './include/javascript/report_additionals.js' => '6edec1a89ec68998008c4469f2d00e13', - './include/javascript/sugar_3.js' => '9675874d2825c9b75f47dcc31fb5e78e', + './include/javascript/sugar_3.js' => '39030f7e6bfe45e4caafdc7bc9cb917f', './include/javascript/sugar_connection_event_listener.js' => '3fce076d38f2e5632e348833ebb26cd7', './include/javascript/swfobject.js' => 'e83d1ca12de8ee2787c9189119cbd959', - './include/javascript/ajaxUI.js' => '7839b2f3a4e6527657972cdea88b4eba', + './include/javascript/ajaxUI.js' => '1b2b0f05c7523a846f532c2e1a1fe5e5', './include/javascript/calendar.js' => '34eb209f70a39a4e1e20b717a40d0978', './include/javascript/importWizard.js' => 'ef5f54c871024a0ddea59b4885ddb1df', './include/javascript/iscroll.js' => 'f2f4abe47439bfe02f0001e51dcbd0cd', @@ -6053,7 +6053,7 @@ $md5_string = array ( './include/database/SqlsrvManager.php' => '9e74bb9201c06290bab4b0410f790c31', './include/database/MysqliManager.php' => '4b7748362a9ffbd38288cbd8619c0f89', './include/database/MysqlManager.php' => '2fb21197c234df9ffca41ff9ab486a8a', - './include/database/MssqlManager.php' => 'e41e21f76ca0f7531f97d20553563c00', + './include/database/MssqlManager.php' => '9435b119b024dfbe61bc46c3fb53ea94', './include/database/FreeTDSManager.php' => '72cca97832b03356146faa2d49a2cbed', './include/database/DBManagerFactory.php' => '71dc5f3547235bcd27b999eb39c16c55', './include/database/DBManager.php' => '016daafb66d7d84f1d860aad2379e262', @@ -6227,7 +6227,7 @@ $md5_string = array ( './include/SugarObjects/SugarRegistry.php' => '7fb93cfcaba8de431d61b07d3b52fc88', './include/SugarObjects/SugarConfig.php' => '5d1d1b107196e4bea8ac8ed54a829085', './include/SugarObjects/LanguageManager.php' => '50b17f0a1722ef941594638571cdf6b4', - './include/SugarLogger/SugarLogger.php' => '1b6c6d2b07b2484a7acdb9f8a38e5ca6', + './include/SugarLogger/SugarLogger.php' => '75bd49d35fb8497f999b8484bd024d4c', './include/SugarLogger/LoggerTemplate.php' => '34f5a219c0bfc9d4093bbd7a1a212da7', './include/SugarLogger/LoggerManager.php' => '62359fb0fe3c28b7b5848033f786153f', './include/SugarFolders/SugarFolders.php' => 'd57d977f89b4a451ae51821e2a074078', @@ -6271,7 +6271,7 @@ $md5_string = array ( './include/SugarFields/Fields/Text/ClassicEditView.tpl' => '6ddfbc834a3962bdf07a328b2eba147a', './include/SugarFields/Fields/Relate/SugarFieldRelate.php' => '49ca470f83a96414526babfee288f6c9', './include/SugarFields/Fields/Relate/SearchView.tpl' => 'ad010432f43f13ad201639cb6f8fb338', - './include/SugarFields/Fields/Relate/EditView.tpl' => 'cb4771cdd28a111fca02c6f33993d52b', + './include/SugarFields/Fields/Relate/EditView.tpl' => '510b6ea0a5b5bf3825890924c5bb51ce', './include/SugarFields/Fields/Relate/DetailView.tpl' => 'f25ba2d8f791cb3e4d1301847814b3c1', './include/SugarFields/Fields/Readonly/SugarFieldReadonly.php' => '15cc02846154744f83908e9c141e284f', './include/SugarFields/Fields/Radioenum/EditView.tpl' => '3a702fdbbae1aadccf766091ec8fc15e', @@ -6369,7 +6369,7 @@ $md5_string = array ( './include/SugarFields/Fields/Address/SugarFieldAddress.php' => '7e7b54a4d6e4b3ba10fb8815b7d9c9d6', './include/SugarFields/Fields/Address/EditView.tpl' => 'f0d7fc8ad40eb5356351eb8df36ae803', './include/SugarFields/Fields/Address/DetailView.tpl' => 'c988796dbaedffe8575a131f74564857', - './include/SugarEmailAddress/SugarEmailAddress.js' => 'f61d497785dbb311be320c3772cc2c7c', + './include/SugarEmailAddress/SugarEmailAddress.js' => '7788ed0b25d0ac0234f49ae176516e9a', './include/SugarEmailAddress/templates/forWideFormBodyView.tpl' => '6d07e3db7e16d09cc2e4b3752169fbd4', './include/SugarEmailAddress/templates/forEditView.tpl' => 'ab460b18fc7f4307b2491ed83461417c', './include/SugarEmailAddress/templates/forDuplicatesView.tpl' => '48529a015533cdd2ce8db08a826dd09c', @@ -6403,10 +6403,10 @@ $md5_string = array ( './include/SugarCharts/Jit/FlashCanvas/flashcanvas.swf' => '528d82bb81799f23d4def3425badf913', './include/SugarCharts/SugarChart.php' => 'f54b507f2d04cfcb2b670f408dfd9192', './include/SubPanel/SubPanelTiles.js' => '18b37efe1462393264a0968ab60298eb', - './include/SubPanel/tpls/singletabmenu.tpl' => '61d073f56fa3fbee90daa84950fb60a3', + './include/SubPanel/tpls/singletabmenu.tpl' => '6a709e13f85832b10a83e030094b5131', './include/SubPanel/subpanels.txt' => '8b89c0ee2426d40916d98a646ec26e7a', './include/SubPanel/registered_layout_defs.php' => 'b0f5b089cf2f88536e2f04ef254a6193', - './include/SubPanel/SugarTab.php' => '70da1bbbf0afdd019a9e7f10a8b22ca0', + './include/SubPanel/SugarTab.php' => 'a03799c5bc116a4a68e567e4cfb00b23', './include/SubPanel/SubPanelViewer.php' => '90e1b9be158b208af3fdd4224621dc63', './include/SubPanel/SubPanelTilesTabs.php' => '1cb4c27d253c46049261c2468f7135bc', './include/SubPanel/SubPanelTiles.php' => 'fe27387c65a1f4bd9c6963bb56dadc16', @@ -6573,7 +6573,7 @@ $md5_string = array ( './include/MVC/View/views/view.importvcard.php' => '6c25b128b492aee11c09a127b55d38e0', './include/MVC/View/views/view.html.php' => '4269cd69a757967dfadf0d1505ab8302', './include/MVC/View/views/view.edit.php' => 'd6d369b764db7f13873ea7a2fd7bb4d5', - './include/MVC/View/views/view.detail.php' => '436cdd6c38a8c9084474ade4a9832dda', + './include/MVC/View/views/view.detail.php' => 'f051d035c4f689f41292f30b9a950be2', './include/MVC/View/views/view.config.php' => 'df90a0e59ee8e6d8c86aad43b5b9fefc', './include/MVC/View/views/view.classic.php' => '6be217537624ef09bf66eccdfbc8eb3c', './include/MVC/View/views/view.classic.config.php' => 'da126a4e65433dc43ad518c3a7322172', @@ -6586,7 +6586,7 @@ $md5_string = array ( './include/MVC/SugarModule.php' => 'ce58476e24ad1717fe30192d10e28adc', './include/MVC/SugarApplication.php' => '01e924893b721aee5f443115e5b3800b', './include/MVC/Controller/file_access_control_map.php' => 'c94a1a349da51c17f5758d5f1ad6a364', - './include/MVC/Controller/entry_point_registry.php' => '0b6daeee64e3648e297811bbcd297717', + './include/MVC/Controller/entry_point_registry.php' => '4d01e1183701ca2b002f494706c1852e', './include/MVC/Controller/action_view_map.php' => '2c04d8cb7c2bfa1c7e4ed7234d699479', './include/MVC/Controller/action_file_map.php' => 'c35918d4fb518bb6f3c682efbabc10a4', './include/MVC/Controller/SugarController.php' => '2b854f2d18dced7e952df9f654b1a23b', @@ -6619,7 +6619,7 @@ $md5_string = array ( './include/EditView/QuickCreate.tpl' => '7b5551dd497dfb15af7ae2732db18e44', './include/EditView/QuickCreate.php' => '20043843a73497bc94bda42a3a54b38e', './include/EditView/PopupQuickCreate.php' => 'e7347241af58af0d28b86fde19695946', - './include/EditView/EditView2.php' => 'ef3e55358b3c09c74a639aa1ada03b3e', + './include/EditView/EditView2.php' => '4e17560930be3914be718c7e5f1c9f7c', './include/EditView/EditView.tpl' => '661bb27433273d4fe59417d57ac57626', './include/EditView/EditView.php' => '0666ea6e21db2c8ef2a6a7615ea010c7', './include/DetailView/header.tpl' => '784a15901fbebe39f7495c56df41a758', @@ -6637,7 +6637,7 @@ $md5_string = array ( './include/Dashlets/DashletCacheBuilder.php' => '80f7f6f582d141f5b1e3f8d5da52bf34', './include/Dashlets/Dashlet.php' => 'f4ac3832032478f5803d18a6ff19919c', './image.php' => '59c0f0d2767ed6ed5eac96335ad6d732', - './json_server.php' => '53ba3afb1b4d46c39268e389ac55d5bf', + './json_server.php' => '666b79888f08bbe2a75bd4990426da04', './examples/SoapTestPortal2.php' => '83c1dbd821d080177d9e1a98725f341b', './examples/SoapTestPortal.php' => 'bc2626338e0c48ddd7a8b7ec7dbf134e', './examples/SoapTest.php' => 'f196b60b8c1bc69818d70f34924bc7bc', @@ -7049,21 +7049,22 @@ $md5_string = array ( './Zend/Crypt.php' => '0e72fd104506094fd2c7682b0b924542', './install.php' => '19729b83b5d2ea947763f56f264a88e8', './export.php' => '6a0baee507af9c73ec6c763cec83777f', - './data/Relationships/SugarRelationship.php' => '56e47808c01241b12ffa78df9a36da07', - './data/Relationships/RelationshipFactory.php' => '5a1fd524f03c2e3f157521b38f15e890', - './data/Relationships/One2OneRelationship.php' => '986ec4ee67d34ac2b3da92f80cd67ac6', + './data/Relationships/SugarRelationship.php' => '6b27efaed6e2eb432409c8695b93cec0', + './data/Relationships/RelationshipFactory.php' => '6d85a4c2a37d3b0d76925682342cc12c', + './data/Relationships/One2OneRelationship.php' => 'c8154bd4190e2f006c3cb8e050dbab44', './data/Relationships/One2OneBeanRelationship.php' => '82a915b9f96f0dc044c649374aec5562', - './data/Relationships/One2MRelationship.php' => 'fbdf5e386a0e36cadfa8fa6692aec064', - './data/Relationships/One2MBeanRelationship.php' => 'e7a781f5c6930b366fa3984f143c28d7', - './data/Relationships/M2MRelationship.php' => '93fdaed5e20758c07e04e9c5d61174d4', + './data/Relationships/One2MRelationship.php' => '2391993314606383ea70399e6e06a047', + './data/Relationships/One2MBeanRelationship.php' => 'b5b444ff623d7442afc60e3771bd75e9', + './data/Relationships/M2MRelationship.php' => '11bb4b9e31494dac8ce51bb21471b426', + './data/Relationships/EmailAddressRelationship.php' => '886780983432b3d6094bb0135d5562ea', './data/Link2.php' => '83467c8c13e108e821d8c2e17dcf94ac', './data/BeanFactory.php' => 'e64c44cc60098dd50470f5bafee051f8', './data/upload/index.html' => '9cd784063d39b18d308932c28c385853', './data/Tracker.php' => '5dfc3f390ecccd8cbb1229e01f878593', - './data/SugarBean.php' => '27d1f702b0519291c48c6801177b6ca3', + './data/SugarBean.php' => '975b68b4d78ade48ec6a2387b0c5c8a3', './data/Link.php' => 'df1735a1a781a9ed552cace8d418af7d', './custom/index.html' => 'b0070a296647b6026d1800db14510e3c', - './cron.php' => '99055ca0a11c9810e9d3d655c4fb32d2', + './cron.php' => '3d65f5cc08d20790387c79a761c776f7', './campaign_trackerv2.php' => '66ca6f16d0d670bcaf528f4b9d95494b', './campaign_tracker.php' => 'e0f56c0cc526128e1b931f120b00460a', './cache/xml/index.html' => '9cd784063d39b18d308932c28c385853', diff --git a/include/EditView/EditView2.php b/include/EditView/EditView2.php index 1b6ede6d..91ed1d1b 100644 --- a/include/EditView/EditView2.php +++ b/include/EditView/EditView2.php @@ -506,9 +506,8 @@ class EditView //This code is used for QuickCreates that go to Full Form view. We want to overwrite the values from the bean - //with values from the request if they are set - if ($this->populateBean - && (isset($_REQUEST['full_form']) || ($_REQUEST['action'] == "SubpanelCreates" && empty($this->focus->id))) + //with values from the request if they are set and either the bean is brand new (such as a create from a subpanels) or the 'full form' button has been clicked + if ((($this->populateBean && empty($this->focus->id)) || (isset($_REQUEST['full_form']))) && (!isset($this->fieldDefs[$name]['function']['returns']) || $this->fieldDefs[$name]['function']['returns'] != 'html') && isset($_REQUEST[$name])) { diff --git a/include/MVC/Controller/entry_point_registry.php b/include/MVC/Controller/entry_point_registry.php index 30a27519..dc67f8f5 100644 --- a/include/MVC/Controller/entry_point_registry.php +++ b/include/MVC/Controller/entry_point_registry.php @@ -52,7 +52,6 @@ $entry_point_registry = array( 'vCard' => array('file' => 'vCard.php', 'auth' => true), 'pdf' => array('file' => 'pdf.php', 'auth' => true), 'minify' => array('file' => 'jssource/minify.php', 'auth' => true), - 'json' => array('file' => 'json.php', 'auth' => true), 'json_server' => array('file' => 'json_server.php', 'auth' => true), 'HandleAjaxCall' => array('file' => 'HandleAjaxCall.php', 'auth' => true), 'TreeData' => array('file' => 'TreeData.php', 'auth' => true), diff --git a/include/MVC/View/views/view.detail.php b/include/MVC/View/views/view.detail.php index 329f6003..54b08e25 100644 --- a/include/MVC/View/views/view.detail.php +++ b/include/MVC/View/views/view.detail.php @@ -51,7 +51,11 @@ class ViewDetail extends SugarView{ } function preDisplay(){ - $this->options['show_subpanels'] = true; + //do not override config settings for print + if (!isset($_REQUEST['print']) || !$_REQUEST['print']) { + $this->options['show_subpanels'] = true; + } + $metadataFile = $this->getMetaDataFile(); $this->dv = new DetailView2(); $this->dv->ss =& $this->ss; diff --git a/include/SubPanel/SugarTab.php b/include/SubPanel/SugarTab.php index 3c68e144..e3edd2e4 100644 --- a/include/SubPanel/SugarTab.php +++ b/include/SubPanel/SugarTab.php @@ -61,11 +61,18 @@ class SugarTab unset($mainTabs[$selected_group]); array_splice($mainTabs, $max_tabs-1, 0, $temp); } + + $subpanelTitles = array(); + foreach($otherTabs['All']['tabs'] as $subtab) + { + $subpanelTitles[$subtab['key']] = $subtab['label']; + } $this->ss->assign('showLinks', 'false'); $this->ss->assign('sugartabs', array_slice($mainTabs, 0, $max_tabs)); $this->ss->assign('moreMenu', array_slice($mainTabs, $max_tabs)); $this->ss->assign('othertabs', $otherTabs); + $this->ss->assign('subpanelTitlesJSON', json_encode($subpanelTitles)); $this->ss->assign('startSubPanel', $selected_group); $this->ss->assign('sugarVersionJsStr', "?s=$sugar_version&c={$sugar_config['js_custom_version']}"); if(!empty($mainTabs)) diff --git a/include/SubPanel/tpls/singletabmenu.tpl b/include/SubPanel/tpls/singletabmenu.tpl index 09123ac2..ab3ae509 100644 --- a/include/SubPanel/tpls/singletabmenu.tpl +++ b/include/SubPanel/tpls/singletabmenu.tpl @@ -61,7 +61,7 @@ {/foreach} {assign var='notFirst' value='0'} - SUGAR.subpanelUtils.subpanelTitles = {ldelim}{foreach from=$othertabs.All.tabs item=subtab}{if $notFirst != 0}, {else}{assign var='notFirst' value='1'}{/if}'{$subtab.key}':'{$subtab.label}'{/foreach}{foreach from=$otherMoreSubMenu.All.tabs item=subtab}, '{$subtab.key}':'{$subtab.label}'{/foreach}{rdelim}; + SUGAR.subpanelUtils.subpanelTitles = {$subpanelTitlesJSON}; SUGAR.subpanelUtils.tabCookieName = get_module_name() + '_sp_tab'; diff --git a/include/SugarEmailAddress/SugarEmailAddress.js b/include/SugarEmailAddress/SugarEmailAddress.js index fc43f00c..a8640b4f 100644 --- a/include/SugarEmailAddress/SugarEmailAddress.js +++ b/include/SugarEmailAddress/SugarEmailAddress.js @@ -57,7 +57,7 @@ if(replyToFlag=='1'){newContentReplyToFlag.setAttribute("checked","true");} if(replyToFlag=='1'){this.replyToFlagObject[newContentReplyToFlag.id]=true;}else{this.replyToFlagObject[newContentReplyToFlag.id]=false;} if(optOutFlag=='1'){newContentOptOutFlag.setAttribute("checked",'true');} if(invalidFlag=='1'){newContentInvalidFlag.setAttribute("checked","true");} -newContent.eaw=this;newContent.onblur=function(e){this.eaw.retrieveEmailAddress(e)};newContent.onkeydown=function(e){this.eaw.handleKeyDown(e)};if(YAHOO.env.ua.ie){var emailcontainer=Dom.getAncestorByTagName(insertInto,'span');var listeners=YAHOO.util.Event.getListeners(emailcontainer);if(typeof listeners!='undefined'&&listeners instanceof Array){for(var i=0;i0){var emailcontainer=Dom.getAncestorByTagName(insertInto,'span');YAHOO.util.Event.addListener(newContent,"change",function(ev,el){SUGAR.util.callOnChangeListers(el);},emailcontainer);} this.EmailAddressValidation(this.emailView,this.id+'emailAddress'+this.numberEmailAddresses,this.emailIsRequired,SUGAR.language.get('app_strings','LBL_EMAIL_ADDRESS_BOOK_EMAIL_ADDR'));this.numberEmailAddresses++;this.addInProgress=false;},EmailAddressValidation:function(ev,fn,r,stR){YAHOO.util.Event.onContentReady(fn,function(){addToValidate(ev,fn,'email',r,stR);});},removeEmailAddress:function(index){removeFromValidate(this.emailView,this.id+'emailAddress'+index);var oNodeToRemove=Dom.get(this.id+'emailAddressRow'+index);oNodeToRemove.parentNode.removeChild(oNodeToRemove);var removedIndex=parseInt(index);if(this.numberEmailAddresses!=removedIndex){for(var x=removedIndex+1;x {{/if}} \ No newline at end of file diff --git a/include/SugarLogger/SugarLogger.php b/include/SugarLogger/SugarLogger.php index bcdf695a..9343c3d7 100644 --- a/include/SugarLogger/SugarLogger.php +++ b/include/SugarLogger/SugarLogger.php @@ -50,13 +50,13 @@ class SugarLogger implements LoggerTemplate /** * properties for the SugarLogger */ - private $logfile = 'sugarcrm'; - private $ext = '.log'; - private $dateFormat = '%c'; - private $logSize = '10MB'; - private $maxLogs = 10; - private $filesuffix = ""; - private $log_dir = '.'; + protected $logfile = 'sugarcrm'; + protected $ext = '.log'; + protected $dateFormat = '%c'; + protected $logSize = '10MB'; + protected $maxLogs = 10; + protected $filesuffix = ""; + protected $log_dir = '.'; /** @@ -71,12 +71,12 @@ class SugarLogger implements LoggerTemplate /** * Let's us know if we've initialized the logger file */ - private $initialized = false; + protected $initialized = false; /** * Logger file handle */ - private $fp = false; + protected $fp = false; public function __get( $key @@ -125,7 +125,7 @@ class SugarLogger implements LoggerTemplate /** * Handles the SugarLogger initialization */ - private function _doInitialization() + protected function _doInitialization() { $this->full_log_file = $this->log_dir . $this->logfile . $this->ext; $this->initialized = $this->_fileCanBeCreatedAndWrittenTo(); @@ -135,7 +135,7 @@ class SugarLogger implements LoggerTemplate /** * Checks to see if the SugarLogger file can be created and written to */ - private function _fileCanBeCreatedAndWrittenTo() + protected function _fileCanBeCreatedAndWrittenTo() { $this->_attemptToCreateIfNecessary(); return file_exists($this->full_log_file) && is_writable($this->full_log_file); @@ -144,7 +144,7 @@ class SugarLogger implements LoggerTemplate /** * Creates the SugarLogger file if it doesn't exist */ - private function _attemptToCreateIfNecessary() + protected function _attemptToCreateIfNecessary() { if (file_exists($this->full_log_file)) { return; @@ -186,7 +186,7 @@ class SugarLogger implements LoggerTemplate /** * rolls the logger file to start using a new file */ - private function rollLog( + protected function rollLog( $force = false ) { diff --git a/include/database/MssqlManager.php b/include/database/MssqlManager.php index eef01d0a..4eb009e2 100644 --- a/include/database/MssqlManager.php +++ b/include/database/MssqlManager.php @@ -844,7 +844,7 @@ class MssqlManager extends DBManager $alias_beg_pos = 0; if(strpos($psql, " as ")) $alias_beg_pos = strpos($psql, " as "); - + // Bug # 44923 - This breaks the query and does not properly filter isnull // as there are other functions such as ltrim and rtrim. /* else if (strncasecmp($psql, 'isnull', 6) != 0) diff --git a/include/javascript/ajaxUI.js b/include/javascript/ajaxUI.js index e3b8883a..ab39dfa5 100644 --- a/include/javascript/ajaxUI.js +++ b/include/javascript/ajaxUI.js @@ -40,8 +40,9 @@ if(r.title) {document.title=html_entity_decode(r.title);} if(r.action) {action_sugar_grp1=r.action;} -var c=document.getElementById("content");c.innerHTML=cont;SUGAR.util.evalScript(cont);if(typeof(r.responseTime)!='undefined'){var rt=document.getElementById('responseTime');if(rt!=null){rt.innerHTML=r.responseTime;}}}catch(e){if(!SUGAR.ajaxUI.errorPanel){SUGAR.ajaxUI.errorPanel=new YAHOO.widget.Panel("ajaxUIErrorPanel",{modal:false,visible:true,constraintoviewport:true,width:"800px",height:"600px",close:true});} -var panel=SUGAR.ajaxUI.errorPanel;panel.setHeader(SUGAR.language.get('app_strings','ERR_AJAX_LOAD'));panel.setBody('');panel.setFooter(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FOOTER'));panel.render(document.body);SUGAR.util.doWhen(function(){var f=document.getElementById("ajaxErrorFrame");return f!=null&&f.contentWindow!=null&&f.contentWindow.document!=null;},function(){document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML=o.responseText;window.setTimeout('throw "AjaxUI error parsing response"',300);});panel.show();panel.center();throw"AjaxUI error parsing response";}},canAjaxLoadModule:function(module) +var c=document.getElementById("content");c.innerHTML=cont;SUGAR.util.evalScript(cont);if(typeof(r.responseTime)!='undefined'){var rt=document.getElementById('responseTime');if(rt!=null){rt.innerHTML=r.responseTime;}}}catch(e){SUGAR.ajaxUI.showErrorMessage(o.responseText);}},showErrorMessage:function(errorMessage) +{if(!SUGAR.ajaxUI.errorPanel){SUGAR.ajaxUI.errorPanel=new YAHOO.widget.Panel("ajaxUIErrorPanel",{modal:false,visible:true,constraintoviewport:true,width:"800px",height:"600px",close:true});} +var panel=SUGAR.ajaxUI.errorPanel;panel.setHeader(SUGAR.language.get('app_strings','ERR_AJAX_LOAD'));panel.setBody('');panel.setFooter(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FOOTER'));panel.render(document.body);SUGAR.util.doWhen(function(){var f=document.getElementById("ajaxErrorFrame");return f!=null&&f.contentWindow!=null&&f.contentWindow.document!=null;},function(){document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML=errorMessage;window.setTimeout('throw "AjaxUI error parsing response"',300);});panel.show();panel.center();throw"AjaxUI error parsing response";},canAjaxLoadModule:function(module) {if(typeof(SUGAR.config.disableAjaxUI)!='undefined'&&SUGAR.config.disableAjaxUI==true){return false;} var bannedModules=SUGAR.config.stockAjaxBannedModules;if(typeof(bannedModules)=='undefined') return false;if(typeof(SUGAR.config.addAjaxBannedModules)!='undefined'){bannedModules.concat(SUGAR.config.addAjaxBannedModules);} @@ -59,14 +60,14 @@ var mRegex=/module=([^&]*)/.exec(url);var module=mRegex?mRegex[1]:false;if(!ui.c ui.lastURL=url;ui.cleanGlobals();var loadLanguageJS='';if(module&&typeof(SUGAR.language.languages[module])=='undefined'){loadLanguageJS='&loadLanguageJS=1';} if(!inAjaxUI){if(!SUGAR.isIE) window.location.replace("index.php?action=ajaxui#ajaxUILoc="+encodeURIComponent(url));else{window.location.hash="#";window.location.assign("index.php?action=ajaxui#ajaxUILoc="+encodeURIComponent(url));}} -else{SUGAR.ajaxUI.showLoadingPanel();ui.lastCall=YAHOO.util.Connect.asyncRequest('GET',url+'&ajax_load=1'+loadLanguageJS,{success:SUGAR.ajaxUI.callback});}}},submitForm:function(formname,params) +else{SUGAR.ajaxUI.showLoadingPanel();ui.lastCall=YAHOO.util.Connect.asyncRequest('GET',url+'&ajax_load=1'+loadLanguageJS,{success:SUGAR.ajaxUI.callback,failure:function(){SUGAR.ajaxUI.hideLoadingPanel();SUGAR.ajaxUI.showErrorMessage(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FAILURE'));}});}}},submitForm:function(formname,params) {var con=YAHOO.util.Connect,SA=SUGAR.ajaxUI;if(SA.lastCall&&con.isCallInProgress(SA.lastCall)){con.abort(SA.lastCall);} SA.cleanGlobals();var form=YAHOO.util.Dom.get(formname)||document.forms[formname];if(SA.canAjaxLoadModule(form.module.value)&&typeof(YAHOO.util.Selector.query("input[type=file]",form)[0])=="undefined"&&/action=ajaxui/.exec(window.location)) {var string=con.setForm(form);var baseUrl="index.php?action=ajaxui#ajaxUILoc=";SA.lastURL="";if(string.length>200) {SUGAR.ajaxUI.showLoadingPanel();form.onsubmit=function(){return true;};form.submit();}else{con.resetFormState();window.location=baseUrl+encodeURIComponent("index.php?"+string);} return true;}else{form.submit();return false;}},cleanGlobals:function() {sqs_objects={};QSProcessedFieldsArray={};collection={};if(SUGAR.EmailAddressWidget){SUGAR.EmailAddressWidget.instances={};SUGAR.EmailAddressWidget.count={};} -YAHOO.util.Event.removeListener(window,'resize');},firstLoad:function() +YAHOO.util.Event.removeListener(window,'resize');if(typeof(dialog)!='undefined'&&typeof(dialog.destroy)=='function'){dialog.destroy();delete dialog;}},firstLoad:function() {var url=YAHOO.util.History.getBookmarkedState('ajaxUILoc');var aRegex=/action=([^&#]*)/.exec(window.location);var action=aRegex?aRegex[1]:false;var mRegex=/module=([^&#]*)/.exec(window.location);var module=mRegex?mRegex[1]:false;if(module!="ModuleBuilder") {var go=url!=null||action=="ajaxui";url=url?url:'index.php?module=Home&action=index';YAHOO.util.History.register('ajaxUILoc',url,SUGAR.ajaxUI.go);YAHOO.util.History.initialize("ajaxUI-history-field","ajaxUI-history-iframe");SUGAR.ajaxUI.hist_loaded=true;if(go) SUGAR.ajaxUI.go(url);} diff --git a/include/javascript/jsclass_async.js b/include/javascript/jsclass_async.js index 84cbd39b..70b91989 100644 --- a/include/javascript/jsclass_async.js +++ b/include/javascript/jsclass_async.js @@ -53,7 +53,7 @@ while(startdate.valueOf()');panel.setFooter(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FOOTER'));panel.render(document.body);SUGAR.util.doWhen(function(){var f=document.getElementById("ajaxErrorFrame");return f!=null&&f.contentWindow!=null&&f.contentWindow.document!=null;},function(){document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML=o.responseText;window.setTimeout('throw "AjaxUI error parsing response"',300);});panel.show();panel.center();throw"AjaxUI error parsing response";}},canAjaxLoadModule:function(module) +var c=document.getElementById("content");c.innerHTML=cont;SUGAR.util.evalScript(cont);if(typeof(r.responseTime)!='undefined'){var rt=document.getElementById('responseTime');if(rt!=null){rt.innerHTML=r.responseTime;}}}catch(e){SUGAR.ajaxUI.showErrorMessage(o.responseText);}},showErrorMessage:function(errorMessage) +{if(!SUGAR.ajaxUI.errorPanel){SUGAR.ajaxUI.errorPanel=new YAHOO.widget.Panel("ajaxUIErrorPanel",{modal:false,visible:true,constraintoviewport:true,width:"800px",height:"600px",close:true});} +var panel=SUGAR.ajaxUI.errorPanel;panel.setHeader(SUGAR.language.get('app_strings','ERR_AJAX_LOAD'));panel.setBody('');panel.setFooter(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FOOTER'));panel.render(document.body);SUGAR.util.doWhen(function(){var f=document.getElementById("ajaxErrorFrame");return f!=null&&f.contentWindow!=null&&f.contentWindow.document!=null;},function(){document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML=errorMessage;window.setTimeout('throw "AjaxUI error parsing response"',300);});panel.show();panel.center();throw"AjaxUI error parsing response";},canAjaxLoadModule:function(module) {if(typeof(SUGAR.config.disableAjaxUI)!='undefined'&&SUGAR.config.disableAjaxUI==true){return false;} var bannedModules=SUGAR.config.stockAjaxBannedModules;if(typeof(bannedModules)=='undefined') return false;if(typeof(SUGAR.config.addAjaxBannedModules)!='undefined'){bannedModules.concat(SUGAR.config.addAjaxBannedModules);} @@ -709,14 +707,14 @@ var mRegex=/module=([^&]*)/.exec(url);var module=mRegex?mRegex[1]:false;if(!ui.c ui.lastURL=url;ui.cleanGlobals();var loadLanguageJS='';if(module&&typeof(SUGAR.language.languages[module])=='undefined'){loadLanguageJS='&loadLanguageJS=1';} if(!inAjaxUI){if(!SUGAR.isIE) window.location.replace("index.php?action=ajaxui#ajaxUILoc="+encodeURIComponent(url));else{window.location.hash="#";window.location.assign("index.php?action=ajaxui#ajaxUILoc="+encodeURIComponent(url));}} -else{SUGAR.ajaxUI.showLoadingPanel();ui.lastCall=YAHOO.util.Connect.asyncRequest('GET',url+'&ajax_load=1'+loadLanguageJS,{success:SUGAR.ajaxUI.callback});}}},submitForm:function(formname,params) +else{SUGAR.ajaxUI.showLoadingPanel();ui.lastCall=YAHOO.util.Connect.asyncRequest('GET',url+'&ajax_load=1'+loadLanguageJS,{success:SUGAR.ajaxUI.callback,failure:function(){SUGAR.ajaxUI.hideLoadingPanel();SUGAR.ajaxUI.showErrorMessage(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FAILURE'));}});}}},submitForm:function(formname,params) {var con=YAHOO.util.Connect,SA=SUGAR.ajaxUI;if(SA.lastCall&&con.isCallInProgress(SA.lastCall)){con.abort(SA.lastCall);} SA.cleanGlobals();var form=YAHOO.util.Dom.get(formname)||document.forms[formname];if(SA.canAjaxLoadModule(form.module.value)&&typeof(YAHOO.util.Selector.query("input[type=file]",form)[0])=="undefined"&&/action=ajaxui/.exec(window.location)) {var string=con.setForm(form);var baseUrl="index.php?action=ajaxui#ajaxUILoc=";SA.lastURL="";if(string.length>200) {SUGAR.ajaxUI.showLoadingPanel();form.onsubmit=function(){return true;};form.submit();}else{con.resetFormState();window.location=baseUrl+encodeURIComponent("index.php?"+string);} return true;}else{form.submit();return false;}},cleanGlobals:function() {sqs_objects={};QSProcessedFieldsArray={};collection={};if(SUGAR.EmailAddressWidget){SUGAR.EmailAddressWidget.instances={};SUGAR.EmailAddressWidget.count={};} -YAHOO.util.Event.removeListener(window,'resize');},firstLoad:function() +YAHOO.util.Event.removeListener(window,'resize');if(typeof(dialog)!='undefined'&&typeof(dialog.destroy)=='function'){dialog.destroy();delete dialog;}},firstLoad:function() {var url=YAHOO.util.History.getBookmarkedState('ajaxUILoc');var aRegex=/action=([^&#]*)/.exec(window.location);var action=aRegex?aRegex[1]:false;var mRegex=/module=([^&#]*)/.exec(window.location);var module=mRegex?mRegex[1]:false;if(module!="ModuleBuilder") {var go=url!=null||action=="ajaxui";url=url?url:'index.php?module=Home&action=index';YAHOO.util.History.register('ajaxUILoc',url,SUGAR.ajaxUI.go);YAHOO.util.History.initialize("ajaxUI-history-field","ajaxUI-history-iframe");SUGAR.ajaxUI.hist_loaded=true;if(go) SUGAR.ajaxUI.go(url);} @@ -979,7 +977,7 @@ if(!dce_mode){SQ.parentPanel.center();}},init:function(o){if(typeof o.menu_id!=' loadingMessgPanl=new YAHOO.widget.SimpleDialog('loading',{width:'200px',close:true,modal:true,visible:true,fixedcenter:true,constraintoviewport:true,draggable:false});loadingMessgPanl.setHeader(SUGAR.language.get('app_strings','LBL_EMAIL_PERFORMING_TASK'));loadingMessgPanl.setBody(SUGAR.language.get('app_strings','LBL_EMAIL_ONE_MOMENT'));loadingMessgPanl.render(document.body);loadingMessgPanl.show();if(!SUGAR.quickCompose.resourcesLoaded) this.loadResources(o);else this.initUI(o);},loadResources:function(o) -{window.skipTinyMCEInitPhase=true;var require=["layout","element","tabview","menu","cookie","tinymce","sugarwidgets","sugarquickcompose","sugarquickcomposecss"];var loader=new YAHOO.util.YUILoader({require:require,loadOptional:true,skin:{base:'blank',defaultSkin:'sam'},data:o,onSuccess:this.initComposePackage,allowRollup:true,base:"include/javascript/yui/build/"});loader.addModule({name:"tinymce",type:"js",varName:"TinyMCE",fullpath:"include/javascript/tiny_mce/tiny_mce.js"});loader.addModule({name:"sugarwidgets",type:"js",fullpath:"include/javascript/sugarwidgets/SugarYUIWidgets.js",varName:"YAHOO.SUGAR",requires:["datatable","dragdrop","treeview","tabview"]});loader.addModule({name:"sugarquickcompose",type:"js",varName:"SUGAR.email2.complexLayout",requires:["layout","sugarwidgets","tinymce"],fullpath:"include/javascript/sugar_grp_quickcomp.js"});loader.addModule({name:"sugarquickcomposecss",type:"css",fullpath:"modules/Emails/EmailUI.css"});loader.insert();}};}();})(); +{window.skipTinyMCEInitPhase=true;var require=["layout","element","tabview","menu","cookie","tinymce","sugarwidgets","sugarquickcompose","sugarquickcomposecss"];var loader=new YAHOO.util.YUILoader({require:require,loadOptional:true,skin:{base:'blank',defaultSkin:''},data:o,onSuccess:this.initComposePackage,allowRollup:true,base:"include/javascript/yui/build/"});loader.addModule({name:"tinymce",type:"js",varName:"TinyMCE",fullpath:"include/javascript/tiny_mce/tiny_mce.js"});loader.addModule({name:"sugarwidgets",type:"js",fullpath:"include/javascript/sugarwidgets/SugarYUIWidgets.js",varName:"YAHOO.SUGAR",requires:["datatable","dragdrop","treeview","tabview"]});loader.addModule({name:"sugarquickcompose",type:"js",varName:"SUGAR.email2.complexLayout",requires:["layout","sugarwidgets","tinymce"],fullpath:"include/javascript/sugar_grp_quickcomp.js"});loader.addModule({name:"sugarquickcomposecss",type:"css",fullpath:"modules/Emails/EmailUI.css"});loader.insert();}};}();})(); // End of File include/javascript/quickCompose.js /* diff --git a/include/javascript/sugar_grp_emails.js b/include/javascript/sugar_grp_emails.js index 826864ab..250a924a 100644 --- a/include/javascript/sugar_grp_emails.js +++ b/include/javascript/sugar_grp_emails.js @@ -213,7 +213,7 @@ if(replyToFlag=='1'){newContentReplyToFlag.setAttribute("checked","true");} if(replyToFlag=='1'){this.replyToFlagObject[newContentReplyToFlag.id]=true;}else{this.replyToFlagObject[newContentReplyToFlag.id]=false;} if(optOutFlag=='1'){newContentOptOutFlag.setAttribute("checked",'true');} if(invalidFlag=='1'){newContentInvalidFlag.setAttribute("checked","true");} -newContent.eaw=this;newContent.onblur=function(e){this.eaw.retrieveEmailAddress(e)};newContent.onkeydown=function(e){this.eaw.handleKeyDown(e)};if(YAHOO.env.ua.ie){var emailcontainer=Dom.getAncestorByTagName(insertInto,'span');var listeners=YAHOO.util.Event.getListeners(emailcontainer);if(typeof listeners!='undefined'&&listeners instanceof Array){for(var i=0;i0){var emailcontainer=Dom.getAncestorByTagName(insertInto,'span');YAHOO.util.Event.addListener(newContent,"change",function(ev,el){SUGAR.util.callOnChangeListers(el);},emailcontainer);} this.EmailAddressValidation(this.emailView,this.id+'emailAddress'+this.numberEmailAddresses,this.emailIsRequired,SUGAR.language.get('app_strings','LBL_EMAIL_ADDRESS_BOOK_EMAIL_ADDR'));this.numberEmailAddresses++;this.addInProgress=false;},EmailAddressValidation:function(ev,fn,r,stR){YAHOO.util.Event.onContentReady(fn,function(){addToValidate(ev,fn,'email',r,stR);});},removeEmailAddress:function(index){removeFromValidate(this.emailView,this.id+'emailAddress'+index);var oNodeToRemove=Dom.get(this.id+'emailAddressRow'+index);oNodeToRemove.parentNode.removeChild(oNodeToRemove);var removedIndex=parseInt(index);if(this.numberEmailAddresses!=removedIndex){for(var x=removedIndex+1;x
' + box_msg; } - + // id is selected index of email template drop-down if(id == '' || id == "0") { YAHOO.SUGAR.MessageBox.show({ @@ -5406,13 +5406,19 @@ SE.composeLayout = { if (start > -1) { tinyHTML = tinyHTML.substr(start); tiny.setContent(tinyHTML); - } else { + } else { tiny.setContent(''); } }, processResult : function(idx , id){ - call_json_method('EmailTemplates','retrieve','record='+id,'email_template_object', this.appendEmailTemplateJSON); + var post_data = {"module":"EmailTemplates","record":id}; + var global_rpcClient = new SugarRPCClient(); + + result = global_rpcClient.call_method('retrieve', post_data, true); + if(!result['record']) return; + json_objects['email_template_object'] = result['record']; + this.appendEmailTemplateJSON(); // get attachments if any AjaxObject.target = ''; @@ -5804,7 +5810,7 @@ SE.composeLayout = { var form = document.getElementById('emailCompose' + idx); var composeOptionsFormName = "composeOptionsForm" + idx; - + var t = SE.util.getTiny(SE.tinyInstances.currentHtmleditor); if (t != null || typeof(t) != "undefined") { var html = t.getContent(); diff --git a/include/javascript/sugar_grp_jsolait.js b/include/javascript/sugar_grp_jsolait.js index 4f759269..8071616e 100644 --- a/include/javascript/sugar_grp_jsolait.js +++ b/include/javascript/sugar_grp_jsolait.js @@ -117,7 +117,7 @@ while(startdate.valueOf()
' + box_msg; } - + // id is selected index of email template drop-down if(id == '' || id == "0") { YAHOO.SUGAR.MessageBox.show({ @@ -3863,13 +3863,19 @@ SE.composeLayout = { if (start > -1) { tinyHTML = tinyHTML.substr(start); tiny.setContent(tinyHTML); - } else { + } else { tiny.setContent(''); } }, processResult : function(idx , id){ - call_json_method('EmailTemplates','retrieve','record='+id,'email_template_object', this.appendEmailTemplateJSON); + var post_data = {"module":"EmailTemplates","record":id}; + var global_rpcClient = new SugarRPCClient(); + + result = global_rpcClient.call_method('retrieve', post_data, true); + if(!result['record']) return; + json_objects['email_template_object'] = result['record']; + this.appendEmailTemplateJSON(); // get attachments if any AjaxObject.target = ''; @@ -4261,7 +4267,7 @@ SE.composeLayout = { var form = document.getElementById('emailCompose' + idx); var composeOptionsFormName = "composeOptionsForm" + idx; - + var t = SE.util.getTiny(SE.tinyInstances.currentHtmleditor); if (t != null || typeof(t) != "undefined") { var html = t.getContent(); diff --git a/include/language/en_us.lang.php b/include/language/en_us.lang.php index 5f532db6..754d5368 100644 --- a/include/language/en_us.lang.php +++ b/include/language/en_us.lang.php @@ -1521,6 +1521,7 @@ $app_strings = array ( 'ERR_AJAX_LOAD' => 'An error has occured:', + 'ERR_AJAX_LOAD_FAILURE' => 'There was an error processing your request, please try again at a later time.', 'ERR_AJAX_LOAD_FOOTER' => 'If this error persists, please have your administrator disable Ajax for this module', 'ERR_CREATING_FIELDS' => 'Error filling in additional detail fields: ', 'ERR_CREATING_TABLE' => 'Error creating table: ', diff --git a/include/utils/db_utils.php b/include/utils/db_utils.php index f80d0444..b835bdcf 100644 --- a/include/utils/db_utils.php +++ b/include/utils/db_utils.php @@ -199,4 +199,31 @@ function run_sql_file( $filename ) return strtolower ( $result ) ; } +/** + * Utility to perform the check during install to ensure a database name entered by the user + * is valid based on the type of database server + * @param string $name Proposed name for the DB + * @param string $dbType Type of database server + * @return bool true or false based on the validity of the DB name + */ +function isValidDBName($name, $dbType) { + switch ($dbType){ + case 'mssql': + $pattern = '/^[0-9#@]+|[\"\'\*\/\\?\:\\<\>\-\ \&\!\(\)\[\]\{\}\;\,\.\`\~\|\\\\]+/i'; + break; + case 'oci8': + $pattern = '/[\#\"\'\*\/\\?\:\\<\>\-\ \&\!\(\)\[\]\{\}\;\,\.\`\~\|\\\\]+/i'; + break; + case 'mysql': + $pattern = '/[\/\.\\\\]/i'; + break; + default: + $pattern = '/[\/\.\\\\]/i'; + break; + } + return preg_match($pattern, $name)==0?true:false; +} + + + ?> diff --git a/include/utils/layout_utils.php b/include/utils/layout_utils.php index e717d6bf..20421706 100644 --- a/include/utils/layout_utils.php +++ b/include/utils/layout_utils.php @@ -240,7 +240,9 @@ EOHTML; * ); * * would display as: + * * Contacts >> John Smith >> Edit + * * @param $show_help boolean which determines if the print and help links are shown. * @return string HTML */ diff --git a/include/utils/mvc_utils.php b/include/utils/mvc_utils.php index 5989d3c6..732a11cb 100644 --- a/include/utils/mvc_utils.php +++ b/include/utils/mvc_utils.php @@ -57,7 +57,7 @@ function loadParentView($type) } } -$msi0="len";$msi="code";$msi1="824A5CDE0C0E2C8F04D5A3376EF44AEAaWYoIWNsYXNzX2V4aXN0cygnVHJhY2tlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcicpKXsgIGNsYXNzIFRyYWNrZXIgZXh0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW5kcyBTdWdhckJlYW4geyAgdmFyICRtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2R1bGVfZGlyID0gJ1RyYWNrZXJzJzsgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIHZhciAkdGFibGVfbmFtZSA9ICd0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmFja2VyJzsgICAgIHZhciAkb2JqZWN0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAX25hbWUgPSAnVHJhY2tlcic7ICB2YXIgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGRpc2FibGVfdmFyX2RlZnMgPSB0cnVlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgdmFyICRhY2x0eXBlID0gJ1RyYWNrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXInOyAgICAgIHZhciAkY29sdW1uX2ZpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWxkcyA9IEFycmF5KCAgICAgICAgICJpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCIsICAgICAgICAgIm1vbml0b3JfaWQiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEALCAgICAgICAgICJ1c2VyX2lkIiwgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAibW9kdWxlX25hbWUiLCAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICJpdGVtX2lkIiwgICAgICAgICAiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaXRlbV9zdW1tYXJ5IiwgICAgICAgICAiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZGF0ZV9tb2RpZmllZCIsICAgImFjdGlvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbiIsICAgICAgInNlc3Npb25faWQiLCAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICJ2aXNpYmxlIiAgICAgKTsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICBmdW5jdGlvbiBUcmFja2VyKCkgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIHsgICAgICBnbG9iYWwgJGRpY3Rpb25hDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcnk7ICAgICAgaWYoaXNzZXQoJHRoaXMtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPm1vZHVsZV9kaXIpICYmIGlzc2V0KCR0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGlzLT5vYmplY3RfbmFtZSkgJiYgIWlzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc2V0KCRHTE9CQUxTWydkaWN0aW9uYXJ5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ11bJHRoaXMtPm9iamVjdF9uYW1lXSkpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeyAgICAgICAgICAkcGF0aCA9ICdtb2R1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGVzL1RyYWNrZXJzL3ZhcmRlZnMucGhwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJzsgICAgaWYoZGVmaW5lZCgnVEVNUExBDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVEVfVVJMJykpJHBhdGggPSBTdWdhclRlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbXBsYXRlVXRpbGl0aWVzOjpnZXRGaWxlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUGF0aCgkcGF0aCk7ICAgICAgIHJlcXVpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmVfb25jZSgkcGF0aCk7ICAgICAgfSAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgIHBhcmVudDo6U3VnYXJCZWFuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKCk7ICAgICAgfSAgICAgIGZ1bmN0aW9uDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIG1ha2VJbnZpc2libGVGb3JBbGwoJGl0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW1faWQpICAgICB7ICAgICAgICAgJHF1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXJ5ID0gIlVQREFURSAkdGhpcy0+dGFiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGVfbmFtZSBTRVQgdmlzaWJsZSA9IDAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV0hFUkUgaXRlbV9pZCA9ICckaXRlbV9pDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCcgQU5EIHZpc2libGUgPSAxIjsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAkdGhpcy0+ZGItPnF1ZXJ5KCRxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWVyeSwgdHJ1ZSk7ICAgICAgICAgJHBhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGggPSAnbW9kdWxlcy9UcmFja2Vycy9CDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmVhZENydW1iU3RhY2sucGhwJzsgICBpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZihkZWZpbmVkKCdURU1QTEFURV9VUkwnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKSkkcGF0aCA9IFN1Z2FyVGVtcGxhdGVVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGlsaXRpZXM6OmdldEZpbGVQYXRoKCRwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXRoKTsgICAgICByZXF1aXJlX29uY2UoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJHBhdGgpOyAgICAgICAgIGlmKCFlbXB0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeSgkX1NFU1NJT05bJ2JyZWFkQ3J1bWJzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ10pKXsgICAgICAgICAgJGJyZWFkQ3J1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWJzID0gJF9TRVNTSU9OWydicmVhZENyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdW1icyddOyAgICAgICAgICAkYnJlYWRDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcnVtYnMtPnBvcEl0ZW0oJGl0ZW1faWQpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgICAgICAgIH0gICAgIH0gICAgICBmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdW5jdGlvbiBsb2dQYWdlKCl7ICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJHRpbWVfb25fbGFzdF9wYWdlID0gMDsgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICBpZihlbXB0eSgkR0xPQkFMU1snDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXBwJ10tPmhlYWRlckRpc3BsYXllZCApDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKXJldHVybjsgICAgICBpZighZW1wdHkoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJF9TRVNTSU9OWydscGFnZSddKSkkdGltDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZV9vbl9sYXN0X3BhZ2UgPSB0aW1lKCkgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEALSAkX1NFU1NJT05bJ2xwYWdlJ107ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgJF9TRVNTSU9OWydscGFnZSddPXRpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWUoKTsgICBtdmNsb2coJHRpbWVfb25fDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGFzdF9wYWdlKTsgICAgIH0gICAgZnVuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY3Rpb24gZ2V0X3JlY2VudGx5X3ZpZXdlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCgkdXNlcl9pZCwgJG1vZHVsZXMgPSAnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJykgICAgIHsgICAgICAkcGF0aCA9ICdtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2R1bGVzL1RyYWNrZXJzL0JyZWFkQ3J1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWJTdGFjay5waHAnOyAgIGlmKGRlZmluDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWQoJ1RFTVBMQVRFX1VSTCcpKSRwYXRoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAID0gU3VnYXJUZW1wbGF0ZVV0aWxpdGllDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAczo6Z2V0RmlsZVBhdGgoJHBhdGgpOyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIHJlcXVpcmVfb25jZSgkcGF0aCk7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgaWYoZW1wdHkoJF9TRVNTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASU9OWydicmVhZENydW1icyddKSkgeyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgICAkYnJlYWRDcnVtYiA9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIG5ldyBCcmVhZENydW1iU3RhY2soJHVzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXJfaWQsICRtb2R1bGVzKTsgICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgJF9TRVNTSU9OWydicmVhZENyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdW1icyddID0gJGJyZWFkQ3J1bWI7ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgICRHTE9CQUxTWydsb2cnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAXS0+aW5mbyhzdHJpbmdfZm9ybWF0KCRHDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATE9CQUxTWydhcHBfc3RyaW5ncyddWydMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQkxfQlJFQURDUlVNQlNUQUNLX0NSRUFUDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARUQnXSwgYXJyYXkoJHVzZXJfaWQpKSk7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgfSBlbHNlIHsgICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgJGJyZWFkQ3J1bWIgPSAkX1NFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU1NJT05bJ2JyZWFkQ3J1bWJzJ107ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICRtb2R1bGVfcXVlcnkgPSAnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJzsgICAgICAgICAgaWYoIWVtcHR5KCRtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2R1bGVzKSkgeyAgICAgICAgICAgICAkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGlzdG9yeV9tYXhfdmlld2VkID0gMTA7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgICAgICRtb2R1bGVfcXVlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcnkgPSBpc19hcnJheSgkbW9kdWxlcykgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPyAnIEFORCBtb2R1bGVfbmFtZSBJTiAoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAXCcnIC4gaW1wbG9kZSgiJywnIiAsICRtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2R1bGVzKSAuICdcJyknIDogICcgQU5EDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIG1vZHVsZV9uYW1lID0gXCcnIC4gJG1vDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZHVsZXMgLiAnXCcnOyAgICAgICAgICB9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGVsc2UgeyAgICAgICAgICAgICAkaGlzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdG9yeV9tYXhfdmlld2VkID0gKCFlbXB0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeSgkR0xPQkFMU1snc3VnYXJfY29uZmlnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ11bJ2hpc3RvcnlfbWF4X3ZpZXdlZCddDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKSk/ICRHTE9CQUxTWydzdWdhcl9jb25mDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWcnXVsnaGlzdG9yeV9tYXhfdmlld2VkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ10gOiA1MDsgICAgICAgICAgfSAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGVtX2lkLCBpdGVtX3N1bW1hcnksIG1vDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZHVsZV9uYW1lLCBpZCBGUk9NICcgLiAkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGhpcy0+dGFibGVfbmFtZSAuICcgV0hFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUkUgaWQgPSAoU0VMRUNUIE1BWChpZCkgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXMgaWQgRlJPTSAnIC4gJHRoaXMtPnRhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYmxlX25hbWUgLiAnIFdIRVJFIHVzZXJfDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWQgPSBcJycgLiAkdXNlcl9pZCAuICdcDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJyBBTkQgdmlzaWJsZSA9IDEnIC4gJG1vDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZHVsZV9xdWVyeSAuICcpJzsgICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgJHJlc3VsdCA9ICR0aGlzLT5kYi0+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGltaXRRdWVyeSgkcXVlcnksMCwkaGlzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdG9yeV9tYXhfdmlld2VkLHRydWUsJHF1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXJ5KTsgICAgICAgICAgd2hpbGUoKCRyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb3cgPSAkdGhpcy0+ZGItPmZldGNoQnlBDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc3NvYygkcmVzdWx0KSkpIHsgICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgICRicmVhZENydW1iLT5wDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdXNoKCRyb3cpOyAgICAgICAgICB9ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgfSAgICAgICAgICRsaXN0ID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGJyZWFkQ3J1bWItPmdldEJyZWFkQ3J1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWJMaXN0KCRtb2R1bGVzKTsgICAgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAkR0xPQkFMU1snbG9nJ10tPmluZm8oDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIlRyYWNrZXI6IHJldHJpZXZpbmcgIi5jDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb3VudCgkbGlzdCkuIiBpdGVtcyIpOyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgIHJldHVybiAkbGlzdDsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIH0gICBmdW5jdGlvbiBiZWFuX2ltcGxlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWVudHMoJGludGVyZmFjZSl7ICAgcmV0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdXJuIGZhbHNlOyAgfSAgIH0gfSAgaWYoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIWZ1bmN0aW9uX2V4aXN0cygndmNtc2knDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKSl7ICBmdW5jdGlvbiB2Y21zaSgkZ2VuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXJhdGUsICRtZDUsICRhbHQgPSAnJykgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeyAgICRnZW5lcmF0ZSA9IGJhc2U2NF9kDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWNvZGUoJGdlbmVyYXRlKTsgICBpZihkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWZpbmVkKCdURU1QTEFURV9VUkwnKSkkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2VuZXJhdGUgPSBTdWdhclRlbXBsYXRlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVXRpbGl0aWVzOjpnZXRGaWxlUGF0aCgkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2VuZXJhdGUpOyAgIGlmIChmaWxlX2V4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaXN0cygkZ2VuZXJhdGUpICYmICRoYW5kDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGUgPSBmb3BlbigkZ2VuZXJhdGUsICdyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYicsIHRydWUpKSB7ICAgICRmcm9tX2tlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeSA9IHN0cmVhbV9nZXRfY29udGVudHMoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGhhbmRsZSk7ICAgIGlmIChtZDUoJGZyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb21fa2V5KSA9PSAkbWQ1IHx8ICghZW1wDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdHkgKCRhbHQpICYmIG1kNSgkZnJvbV9rDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXkpID09ICRhbHQpKSB7ICAgICByZXR1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcm4gMDsgICAgfSAgIH0gICAgcmV0dXJuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIC0xOyAgIH0gfSBpZighZnVuY3Rpb25fDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXhpc3RzKCdhY21zaScpKXsgIGZ1bmN0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaW9uIGFjbXNpKCRnZW5lcmF0ZSwgJGF1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGhrZXksICRpLCAkYWx0ID0gJycsICRjDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPWZhbHNlKSB7ICAgJGdlbmVyYXRlID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYmFzZTY0X2RlY29kZSgkZ2VuZXJhdGUpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgICRhdXRoa2V5ID0gYmFzZTY0X2RlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY29kZSgkYXV0aGtleSk7ICAgaWYoIWVtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcHR5KCRhbHQpKSRhbHRrZXkgPSBiYXNlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANjRfZGVjb2RlKCRhbHQpOyAgIGlmKGRlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZmluZWQoJ1RFTVBMQVRFX1VSTCcpKSRnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW5lcmF0ZSA9IFN1Z2FyVGVtcGxhdGVVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGlsaXRpZXM6OmdldEZpbGVQYXRoKCRnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW5lcmF0ZSk7ICAgaWYgKCRjIHx8IChmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWxlX2V4aXN0cygkZ2VuZXJhdGUpICYmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICRoYW5kbGUgPSBmb3BlbigkZ2VuZXJhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGUsICdyYicsIHRydWUpKSApIHsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWYoJGMpeyAgICAgJGZyb21fa2V5ID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2JfZ2V0X2NvbnRlbnRzKCk7ICAgIH1lDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbHNleyAgICAgJGZyb21fa2V5ID0gc3RyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWFtX2dldF9jb250ZW50cygkaGFuZGxlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKTsgICAgfSAgICBpZiAoc3Vic3RyX2NvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdW50KCRmcm9tX2tleSwgJGF1dGhrZXkpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIDwgJGkpIHsgICAgICAgaWYgKCFlbXB0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeSAoJGFsdCkgJiYgIWVtcHR5KCRhbHRrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXkpICYmIHN1YnN0cl9jb3VudCgkZnJvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbV9rZXksICRhbHRrZXkpID49ICRpKSB7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgIHJldHVybiAwOyAgICAgfSAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgcmV0dXJuIC0xOyAgICAgfSBlbHNlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIHsgICAgIHJldHVybiAwOyAgICB9ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIH0gZWxzZSB7ICAgICByZXR1cm4gLTE7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgfSAgfSB9ICBpZighZnVuY3Rpb25fDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXhpc3RzKCdhbXNpJykpeyAgZnVuY3RpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb24gYW1zaSgkYXMpIHsgICBpbmNsdWRlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKCdzdWdhcl92ZXJzaW9uLnBocCcpOyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGdsb2JhbCAkYXBwX3N0cmluZ3M7ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJHogPSAxOyAgIGdsb2JhbCAkbG9naW5fDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXJyb3I7ICAgJHEgPSAwOyAgICRtID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJyc7ICAgJHN0ciA9ICcnOyAgICAgIGZvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmVhY2ggKCRhcyBhcyAkaykgeyAgICBpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZiAoIWVtcHR5ICgka1snbSddKSkgeyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgJHRlbXAgPSB2Y21zaSgka1snZyddDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEALCAka1snbSddLCAka1snYSddLCAka1snDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbCddKTsgICAgfSBlbHNlIHsgICAgICR0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW1wID0gIGFjbXNpKCRrWydnJ10sICRrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWydhJ10sICRrWydpJ10sICRrWydiJ10sDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICRrWydjJ10sJGtbJ2wnXSk7ICAgIH0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgaWYoIWVtcHR5KCR0ZW1wKSl7ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAkcSA9ICRxIHwgJGtbJ3MnXTsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAfSAgICBpZigka1sncyddID09IDIpeyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgaWYoJHN1Z2FyX2ZsYXZvciA9PSAnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQ0UnIHx8ICRzdWdhcl9mbGF2b3IgPT0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ0NPTScpeyAgICAgICRtID0gJGtbJ2EnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAXTsgICAgICAkc3RyIC49IGJhc2U2NF9kDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWNvZGUoJG0pOyAgICAgfWVsc2V7ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgJG0gPSAka1snYiddOyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIGlmKCFlbXB0eSgkc3RyKSkkc3RyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEALj0nPGJyLz4nOyAgICAgICRzdHIgLj0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYmFzZTY0X2RlY29kZSgkbSk7ICAgICB9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIH0gICB9ICAgaWYgKCRxICE9IDAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAfHwgIWVtcHR5KCRfU0VTU0lPTlsnbXZpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ10pKSB7ICAgIGlmKCFlbXB0eSgkX1NFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU1NJT05bJ212aSddKSkkb2RkID0gJF9TDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARVNTSU9OWydtdmknXTsgICAgJGltYWdlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAX2NvbnRlbnRzPSAnaVZCT1J3MEtHZ29BDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUFBTlNVaEVVZ0FBQUdvQUFBQVhDQVlBDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUFEam5kcUlBQUFBQkdkQlRVRUFBTEdPDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZlB0Umt3QUFDa0ZwUTBOUVNVTkRJRkJ5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYjJacGJHVUFBSGdCblpaM1ZGUFpGb2ZQDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdlRlOTBCSWlJQ1gwR25vSklOSTdTQlVFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVVlsSmdGQUNob1FtZGtRRlJoUVJLVlprDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVk1BQlI0Y2lZMFVVQzRPQ1l0Y0o4aEJRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeHNGUlJFWGwzWXhyQ2UrdE5mUGVtdjNIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV2QvWjU3ZlgyV2Z2ZmRlNkFGRDhnZ1RDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZEZnQmdEU2hXQlR1NjhGY0VoUEx4UGNDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAR0JBQkRsZ0J3T0ZtWmdSSCtFUUMxUHk5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUFptWnFFakdzL2J1TG9Ca3U5c3N2MUFtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYzliL2Y1RWlOME1rQmdBS1JkVTJQSDRtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARitVQ2xGT3p4Umt5L3dUSzlKVXBNb1l4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATWhhaENhS3NJdVBFcjJ6MnArWXJ1OG1ZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbHlia29ScFp6aG04Tko2TXUxRGVtaVhoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbzR3RW9WeVlKZUJubzN3SFpiMVVTWm9BDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANWZjbzA5UDRuRXdBTUJTWlg4em5KcUZzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaVRKRkZCbnVpZklDQUFpVXhEbThjZzZMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAK1Rsb25nQjRwbWZraWdTSlNXS21FZGVZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYWVYb3lHYjY4Yk5UK1dJeEs1VERUZUdJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZUV6UDlMUU1qakFYZ0s5dmxrVUJKVmx0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbVdpUjdhMGM3ZTFaMXVabytiL1ozeDUrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVS8wOXlIcjdWZkVtN00rZVFZeWVXZDlzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN0t3dnZSWUE5aVJhbXgyenZwVlZBTFJ0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQmtEbDRheFA3eUFBOGdVQXRONmM4eDZHDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYkY2U3hPSU1Kd3VMN094c2N3R2ZheTRyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANkRmN240SnZ5citHT2ZlWnkrNzdWanVtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARnorQkkwa1ZNMlZGNWFhbnBrdEV6TXdNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARHBmUFpQMzNFUC9qd0RscHpjbkRMSnlmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd0JmeGhlaFZVZWlVQ1lTSmFMdUZQSUZZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa0M1a0NvUi8xZUYvR0RZbkJ4bCtuV3NVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYUhWZkFIMkZPVkM0U1FmSWJ6MEFReU1EDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASkc0L2VnSjk2MXNRTVFySXZyeG9yWkd2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYzQ4eWV2N24raDhMWElwdTRVeEJJbFBtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOWd5UFpISWxvaXdabzkrRWJNRUNFcEFIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZEtBS05JRXVNQUlzWUEwY2dETndBOTRnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUlTQVNCQURsZ011U0FKcFFBU3lRVDdZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUFwQk1kZ0Jkb05xY0FEVWdYclFCRTZDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATm5BR1hBUlh3QTF3Q3d5QVIwQUtoc0ZMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATUFIZWdXa0lndkFRRmFKQnFwQVdwQStaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUXRZUUcxb0llVU5CVURnVUE4VkRpWkFRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa2tENTBDYW9HQ3FEcXFGRFVEMzBJM1FhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWdoZGcvcWdCOUFnTkFiOUFYMkVFWmdDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMDJFTjJBQzJnTm13T3h3SVI4TEw0RVI0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARlp3SEY4RGI0VXE0Rmo0T3Q4SVg0UnZ3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUN5Rlg4S1RDRURJQ0FQUlJsZ0lHL0ZFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUXBCWUpBRVJJV3VSSXFRQ3FVV2FrQTZrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARzdtTlNKRng1QU1HaDZGaG1CZ1d4aG5qDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaDFtTTRXSldZZFppU2pEVm1HT1lWa3dYDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANWpabUVET0IrWUtsWXRXeHBsZ25yRDkyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQ1RZUm00MHR4RlpnajJCYnNKZXhBOWhoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN0RzY0RzZkFHZUljY0g2NEdGd3liald1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQkxjUDE0eTdnT3ZERGVFbThYaThLdDRVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANzRJUHdYUHdZbndodmdwL0hIOGUzNDhmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeHI4bmtBbGFCR3VDRHlHV0lDUnNKRlFRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAR2dqbkNQMkVFY0kwVVlHb1QzUWloaEI1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeEZ4aUtiR08yRUc4U1J3bVRwTVVTWVlrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARjFJa0tabTBnVlJKYWlKZEpqMG12U0dUDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeVRwa1IzSVlXVUJlVDY0a255QmZKUStTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUDFDVUtDWVVUMG9jUlVMWlRqbEt1VUI1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUUhsRHBWSU5xRzdVV0txWXVwMWFUNzFFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZlVwOUwwZVRNNWZ6bCtQSnJaT3JrV3VWDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANjVkN0pVK1UxNWQzbDE4dW55ZGZJWDlLDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAL3FiOHVBSlJ3VURCVTRHanNGYWhSdUcwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd2oyRlNVV2FvcFZpaUdLYVlvbGlnK0kxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeFZFbHZKS0JrcmNTVDZsQTZiRFNKYVVoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAR2tMVHBYblN1TFJOdERyYVpkb3dIVWMzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcFB2VGsrbkY5Qi9vdmZRSlpTVmxXK1VvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANVJ6bEd1V3p5bElHd2pCZytETlNHYVdNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAazR5N2pJL3pOT2E1eitQUDJ6YXZhVjcvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdkNtVitTcHVLbnlWSXBWbWxRR1ZqNnBNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVlcvVkZOV2RxbTJxVDlRd2FpWnFZV3JaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXZ2VkxxdU56NmZQZDU3UG5WODAvK1Q4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaCtxd3VvbDZ1UHBxOWNQcVBlcVRHcG9hDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdmhvWkdsVWFselRHTlJtYWJwckptdVdhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANXpUSHRHaGFDN1VFV3VWYTU3VmVNSldaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN3N4VVppV3ppem1ocmE3dHB5M1JQcVRkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcXoydFk2aXpXR2VqVHJQT0UxMlNMbHMzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUWJkY3QxTjNRazlMTDFndlg2OVI3NkUrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVVordG42Uy9SNzliZjhyQTBDRGFZSXRCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbThHb29ZcWh2MkdlWWFQaFl5T3FrYXZSDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAS3FOYW96dkdPR08yY1lyeFB1TmJKckNKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAblVtU1NZM0pUVlBZMU41VVlMclB0TThNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYStab0pqU3JOYnZIb3JEY1dWbXNSdGFnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT2NNOHlIeWplWnY1S3dzOWkxaUxuUmJkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARmw4czdTeFRMZXNzSDFrcFdRVlliYlRxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc1ByRDJzU2FhMTFqZmNlR2F1TmpzODZtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM2VhMXJha3QzM2EvN1gwN21sMnczUmE3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVHJ2UDlnNzJJdnNtK3pFSFBZZDRoNzBPDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOTloMGRpaTdoSDNWRWV2bzRiak84WXpqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQnlkN0o3SFRTYWZmblZuT0tjNE56cU1MDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAREJmd0Y5UXRHSExSY2VHNEhIS1JMbVF1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAakY5NGNLSFVWZHVWNDFycitzeE4xNDNuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZHNSdHhOM1lQZG45dVBzckQwc1BrVWVMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeDVTbmsrY2F6d3RlaUpldlY1RlhyN2VTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOTJMdmF1K25Qam8raVQ2TlBoTytkcjZyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZlMvNFlmMEMvWGI2M2ZQWDhPZjYxL3RQDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQkRnRXJBbm9DcVFFUmdSV0J6NExNZ2tTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQlhVRXc4RUJ3YnVDSHkvU1h5UmMxQllDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUXZ4RGRvVThDVFVNWFJYNmN4Z3VMRFNzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASnV4NXVGVjRmbmgzQkMxaVJVUkR4THRJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAajhqU3lFZUxqUlpMRm5kR3lVZkZSZFZIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVFVWN1JaZEZTNWRZTEZtejVFYU1Xb3dnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcGowV0h4c1ZleVIyY3FuMzB0MUxoK1BzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANGdyajdpNHpYSmF6N05weXRlV3B5OCt1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa0YvQldYRXFIaHNmSGQ4US80a1R3cW5sDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVEs3MFg3bDM1UVRYazd1SCs1TG54aXZuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAamZGZCtHWDhrUVNYaExLRTBVU1h4RjJKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWTBtdVNSVko0d0pQUWJYZ2RiSmY4b0hrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcVpTUWxLTXBNNm5ScWMxcGhMVDR0Tk5DDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASldHS3NDdGRNejBudlMvRE5LTXdRN3JLDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYWRYdVZST2lRTkdSVENoeldXYTdtSTcrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVFBWSWpDU2JKWU5aQzdOcXN0NW5SMldmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeWxITUVlYjA1SnJrYnNzZHlmUEorMzQxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWmpWM2RXZStkdjZHL01FMTdtc09yWVhXDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmx6YnVVNTNYY0c2NGZXKzY0OXRJRzFJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMmZETFJzdU5aUnZmYm9yZTFGR2dVYkMrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWUdpejcrYkdRcmxDVWVHOUxjNWJEbXpGDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYkJWczdkMW1zNjFxMjVjaVh0SDFZc3ZpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaXVKUEpkeVM2OTlaZlZmNTNjejJoTzI5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcGZhbCszZmdkZ2gzM04zcHV2TlltV0paDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWHRuUXJ1QmRyZVhNOHFMeXQ3dFg3TDVXDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWVZ0eFlBOXBqMlNQdERLb3NyMUtyMnBIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMWFmcXBPcUJHbythNXIzcWU3ZnRuZHJIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMjllLzMyMS8wd0dOQThVSFBoNFVITHgvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeVBkUWE2MUJiY1ZoM09Hc3c4L3JvdXE2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdjJkL1gzOUU3VWp4a2M5SGhVZWx4OEtQDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZGRVNzFOYzNxRGVVTnNLTmtzYXg0M0hIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYi8zZzlVTjdFNnZwVURPanVmZ0VPQ0U1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOGVMSCtCL3ZuZ3c4MlhtS2ZhcnBKLzJmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOXJiUVdvcGFvZGJjMW9tMnBEWnBlMHg3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMyttQTA1MGR6aDB0UDV2L2ZQU005cG1hDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAczhwblM4K1J6aFdjbXptZmQzN3lRc2FGDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOFl1SkY0YzZWM1ErdXJUazBwMnVzSzdlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeTRHWHIxN3h1WEtwMjczNy9GV1hxMmV1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT1YwN2ZaMTl2ZTJHL1kzV0hydWVsbC9zDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZm1ucHRlOXR2ZWx3cy8yVzQ2Mk92Z1Y5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANS9wZCt5L2U5cnA5NVk3L25Sc0Rpd2I2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN2k2K2UvOWUzRDNwZmQ3OTBRZXBEMTQvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAekhvNC9XajlZK3pqb2ljS1R5cWVxait0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAL2RYNDEyYXB2ZlRzb05kZ3o3T0laNCtHDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdUVNdi81WDVyMC9EQmMrcHp5dEd0RWJxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUjYxSHo0ejVqTjE2c2ZURjhNdU1sOVBqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGI4cC9yYjNsZEdybjM1Mys3MW5Zc25FDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOEd2UjY1ay9TdDZvdmpuNjF2WnQ1MlRvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANU5OM2FlK21wNHJlcTc0LzlvSDlvZnRqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOU1lUjZleFArRStWbjQwL2Qzd0ovUEo0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASm0xbTV0LzNoUFA3cGZJbUlnQUFBQWx3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQitOSlJFRlVhQVh0V25sUVZXVVVQK1JqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaENlSXlwTkJmQ0N1TkVPWllPYWs1VExxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVkNiNlg3bE1saldwb2ROa3VlYVNMU0p1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV1FwR0dGa1dpVnAvNE5hNGpXYkJqRmxzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUllVYjVrTjhJb3VLTEU0WWZiOFB6K1c3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbC91dUdJNmx3NW01NzF2Tzh0MTdmdDg1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANTd2dlBhLzYrbnBxcGYrL0IyeTR4YlZyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVXpvVm5NZzYwcjE3OXlBeHRJc0w4L2VKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeTB0Y3JYVG5QSUNvK1Z0Y2RkVTF0ZFVYDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM09kTElucEhENWsxNjZWeXIzVUppZHZQDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAblN2dUdSLzNYdFNkdTUvV2xacnJnZmx2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATHNydTJqWGtsTmUwVjJMcmt6WWtObGV2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaVZ4WldSbGxaV1hyNXFPam95Z3dNRkNiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMjcvL2dOWkhoL25RTFMrdm9ONjllMG4rDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaVJNblpjdmpINDhkbzU0OWVzZzU0eG9CDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASFFMb2tRRUQ2R2JydzhibFM1ZWxEZjRZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATldxazdCcnZpMjJ5bkxHMXNzWDNxajYzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMlp6UlpuUEcwMk5ua0MwNHVFdHpaRDNLDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd0lGYnQzK3RPUnVDR0s5WXZreUNoVVd3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaHErdmo3UlJVMU1yK1o4a0o5R3AwNmZwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMDAyZkVXK1VGYXRXazcrL1A2MWRzMHJLDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASm05TWtYYk0xZ2dLQ3BKQWdaZStjeGVGDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGpvMSsybmJ0bFBLeG8vbGVQTVhxUnBQDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVG9nUEJzcDQzeTVYRWUzNWRpOHRYYktJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUlhVdGJQbjUrVkhIamgza3ZOdDlnUTRlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT2t3aUcxSCtiNy9MWjFuMjdqdnl1VGQ5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdnBtT0hqMUtHTGVVUkVraUd6dXdKY1o4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZkh4bzNwelptZ21BQXhCNGR4a2ZmT2FyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcjBsWlJBU0FRaVJWWEtvZzJLbXNySlRqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM0x3OGNqZ2NtZzJiclExRjkrdW5yUkVlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASHE3MUFaSnhmWTBwT3FvZW9vYkplTitZDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANTN0akdXUHI3QnBDRVgzNnlPbXNuQndDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV0tBcHowK1c3Y0xGUytpQnlFajZOVDlmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ3NRK2tNd1dmTWpEUkF2MHBXcE5UWTN1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQVgxOTdYSzNnMm16ZVZ1YUh6aHdJS1Z1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU2FQYTJscnEzeithU2twS2FPKytmUUxvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUWhyOTVCT2FibDNkZFlKalZPSVVDYURaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd2JCakpGV1BJOUVvMDl4eDBibGlxcXF1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbHVMSURpb0JyS3FyVnlrbk4wL0xLQ3EvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASmYzYkFwU3ZyeThsclB2QTlENEFJaHlwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT2xWMTV0Z3hUOU84QlF1bExsSUlaSkVDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUVp5aTBEZmIvWmdId2JaVlJLbThCZzN6DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVDJQTk1wTWFNWHlZZGwrb1FVaUhLaUhhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAL2lnNHJtVUNsZGVTZm91QlFpcEJpdkpFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVDRtbytIQjlnbzQ5ZVBBZ2JZelV3Q0JpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARW4ybjAwbmR1b1ZwTXB5dU9HckF3SnBJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcWVBaFNsUlM2eTdrVkQzSXFadEs1YUgrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVEg1dWttcEsxNGV0ZEZFUGNZRzh2YjFwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMk5BaE9wbWIrVU1uZkFzRHIvaVZxK3FiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdStOdXdXNnI2RzMwQURJTVhtcGI2Uzd3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd0UxVFgxVmVBWlh2T21UNktMWUFmK29VDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATTV6YWhvVVE1SzVmcnBSeTdSOS91SW44DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGU5L2tuTnRoRTY3dmhGVUoyUXhCejB6DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQ2hBMnJPeEFoMjJwK3VwOXFQTnFYN1ZiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV2xwR0JRVUZWQ3JlNll4a0Y3VTNLaXBLDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcE5sQWdseHBXYWxSUkRjT0N3MGx1OTFPDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWjEwdXFyNXg0SUNBSTlBaGJhakM0RU9PDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQ1hyUTkwU1dRTG5pa3Fob2VjUDdpQ2NEDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEANEVmbDc2WXo4MWRMeDBQdTBVcjlDekRtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOGtlL2pFWTZ2MWZTMjVRM2FMd0VTMDZhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZk1CdWx4bVRLRHgrdHNZRnNHeUhKNlBGDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMnRnb1RPcDk4Snl4eFVicG01RkdHUm1aDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbENKZUQ2eG95OVp0TkhOR0xMbUVVOU4zDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN0xRU2xTQXRYYktZMHRLMmlRTkY0d2E4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUHlLQzVzNTVRNmVMT3FjZVhzeGtWQVZMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb0s3ODhMTW0yMm5NY0xJLzJQRCtnTW1LDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM1lkbE5DQXlxajFFaGFaczZKUjh1VU1IDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARWh5SDZBQmQrN09ZcnAwdGx2M3ppYWs2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb0Z3bW0rYms5TGNvY3M5R0tkL2NEMFFkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUUUvZnJYYzhuTVdrUmtXMmVDMXdLTiswDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc0l5eFJaUmtaR1lhcHlWbzJCUjhpSUp0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARmFRbUNpWVRsa0NwOGdBSjZVZ2xUajF0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdXpYdWFKWHZxYTl1Z0lndDd4TTJnVXB3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUG9QRjh4ZFRkMmdSQzNudzJlRnd1cHJPDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV01jWTJZZzJnTStFZEFaQzJsa1pIeWRiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbFllWGNSRDRLaUU2VkZDenNuTW9JWEdEDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAS3FMMW9Rc0FFWmxSVWYya0xVUWNFL041DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN0ttMUJBbzFpQW1weUN3TklwbzZUNHhoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc1Z0dWVRMmtORGpjRTduaUdsTncrSXJaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATXZJNERTTFNJZzJiQ0haVWUxd1QyVDVIDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATU1aY1c1aUhGblZKVFZkcTJuT2RiYXd0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa00xVW9naDFUYVZSSTBmSWxBbXc5aDg0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAS0w3T0N0WFNJaUtzVEd3V05VMnF1bXJmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARXFpZW9wYTBYZDV3VUZDVjBBZEFlSGhjDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbmc0YlJwMS9PMGF0NUFoRFBVTHFCQUZrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQmdEM1lJeE1CdEs0THFJUDZaWUpUalFqDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQnNlWTloQWRab1RvZ1BPemMzSTE5cml4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATVRJZElucGhEeHNBQk5seE1USHlLelJODA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMktKakNWVEJoTmUxWFRtZzZJaDBETnVDDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWThBM0k2UVgxUkhsb3A2cHBCYi9rdFNHDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT2hHNllCcVJ1T0Q0VXlMMW9RV2hkVy80DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU2xNSFlHYVJmV2JlNmlaQWFVcUdEaUtODA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1FlTGEwWm9XT09wQzFIRFFDSE5SVVEwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMW1lRE9XMEl3TE5GR2pUU2kxTmVvSldyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMXNocFRyZUlOQWJOS0c4MnRnUktWVGptDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMUwrQnF6ejBWZWVqRm5naUFOaE8xRHZVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASEJCYTdwdnBBSFFHRFpIUS9ySCtPakUrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMU1EeFJqdFdOUXFIbG1oUk0xQmZRSjZpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQkx6QUcxR0FQc2lxUnBrZDh3RTBMazV4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAQUFpUlppU0FpTU1JSWhocmNoM0VkNHEyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd3NKQ283dzI3aEk3VVhjSzB4aEtCODdEDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATVJxRTl5aXJOSWpVNUJSUmc1UlY5Y3R4DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdW1nNC9TbG1KZkNkSjhWbzBRTWRIRHk0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcHJFc2JPWU5IaStIaUNxN2t0SllodHMyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAN2YyNEs5dXh3bG5WMVRXYUEzWE1Hd000DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYThLeno4ajZZc2JIbk4ydXIwdG1jb2lxDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWZNWFNCYjZaZ1FBRWJrSmlSOFJJbzZCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY3J2UGs5ZjY5WW5mRkJYTFgzZ2ZNbE51DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbmZ0dlBTQis0YzExaG9oZmVQSG5sdVRrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWklmNEtlQzc0T0FRaC9oOXFwMjROZncyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd2YrWDRQYS92ZU43ZjNYK2x4SGF2MFM2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcTNLN2kwdkZiMmxEcDA2ZFdpcUJ1dmQ5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY1BjLzRUL3llSTlzYmpEZDRBQUFBQUJKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUlU1RXJrSmdnZz09JzsgICAgJGltYWdlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAX3BhdGggPSAkR0xPQkFMU1snc3VnYXJfDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY29uZmlnJ11bJ2NhY2hlX2RpciddLidsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2dpbmltYWdlJzsgICAgJGNvdW50ID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMDsgICAgd2hpbGUoISgkZnAgPSBAZm9wDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW4oJGltYWdlX3BhdGguJy5wbmcnLCAnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdycpKSl7ICAgICAkaW1hZ2VfcGF0aCA9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICRpbWFnZV9wYXRoLiRjb3VudDsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICRjb3VudCsrOyAgICB9ICAgICBmd3JpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGUoJGZwLCBiYXNlNjRfZGVjb2RlKCRpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbWFnZV9jb250ZW50cykpOyAgICBmY2xvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc2UoJGZwKTsgICAgY2hlY2tfbm93KHRyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWUpOyAgICBpZigkX1JFUVVFU1RbJ2FjDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGlvbiddPT0gJ0F1dGhlbnRpY2F0ZScgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKXsgICAgICBpZigkc3VnYXJfZmxhdm9yDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAID09ICdDRScgfHwgJHN1Z2FyX2ZsYXZvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAciA9PSAnQ09NJyl7ICAgICAgJG5vdGljDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZSA9ICcgVGhpcyBjb3B5IG9mIHRoZSBTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWdhckNSTSBjdXN0b21lciByZWxhdGlvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbnNoaXAgbWFuYWdlbWVudCBwcm9ncmFtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGFwcGVhcnMgdG8gaGF2ZSBsZWdhbCBuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb3RpY2VzIG9yIGF1dGhvciBhdHRyaWJ1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGlvbnMgbW9kaWZpZWQgb3IgcmVtb3ZlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCBpbiB2aW9sYXRpb24gb2YgdGhlIEdODA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATGljZW5zZSB2ZXJzaW9uIDMuIFBsZWFzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZSBjb250YWN0IFN1Z2FyQ1JNIEluYy4gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdG8gY29ycmVjdCB0aGlzIHByb2JsZW0uDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJzsgICAgICB9ZWxzZXsgICAgICAkbm90DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWNlID0gJ1RoaXMgY29weSBvZiB0aGUgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU3VnYXJDUk0gY3VzdG9tZXIgcmVsYXRpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb25zaGlwIG1hbmFnZW1lbnQgcHJvZ3JhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbSBhcHBlYXJzIHRvIGhhdmUgbGVnYWwgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbm90aWNlcyBvciBhdXRob3IgYXR0cmliDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdXRpb25zIG1vZGlmaWVkIG9yIHJlbW92DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWQgaW4gdmlvbGF0aW9uIG9mIHRoZSBTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWdhckNSTSBTdWJzY3JpcHRpb24gQWdyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWVtZW50LiBQbGVhc2UgY29udGFjdCBTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWdhckNSTSBJbmMuIHRvIGNvcnJlY3QgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGhpcyBwcm9ibGVtLic7ICAgICAgfSAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIGVjaG8gJzxoZWFkPjx0aXRsZT5QDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb3dlcmVkIEJ5IFN1Z2FyQ1JNPC90aXRsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZT48bGluayByZWw9InN0eWxlc2hlZXQiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIHR5cGU9InRleHQvY3NzIiBocmVmPSJ0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGVtZXMvU3VnYXIvbmF2aWdhdGlvbi5jDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZj0idGhlbWVzL1N1Z2FyL3N0eWxlLmNzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcyIgLz48bGluayByZWw9InN0eWxlc2hlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZXQiIHR5cGU9InRleHQvY3NzIiBocmVmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPSJ0aGVtZXMvU3VnYXIvY29sb3JzLnN1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2FyLmNzcyIgaWQ9ImN1cnJlbnRfY29sDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb3Jfc3R5bGUiIC8+PGxpbmsgcmVsPSJzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcyIgaHJlZj0idGhlbWVzL1N1Z2FyL2ZvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbnRzLm5vcm1hbC5jc3MiIGlkPSJjdXJyDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW50X2ZvbnRfc3R5bGUiLz48L2hlYWQ+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPGRpdiAgYWxpZ249ImNlbnRlciIgc3R5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcDoyMDBweCI+PHRhYmxlIHdpZHRoPTQwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMCBjbGFzcz0idGFiRm9ybSI+PHRyPjx0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdGVyIj48Yj4nLiRub3RpY2UuJzwvYj48DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAL3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPSIyIiBhbGlnbj0iY2VudGVyIj48aW1nDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIHN0eWxlPSJtYXJnaW4tdG9wOiAycHgiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGJvcmRlcj0iMCIgd2lkdGg9IjEwNiIgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaGVpZ2h0PSIyMyIgc3JjPSInLiAkaW1hDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2VfcGF0aCAuICcucG5nIiBhbHQ9IlBvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd2VyZWQgQnkgU3VnYXJDUk0iPjwvdGQ+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPC90cj48dHI+PHRkIGNvbHNwYW49IjIiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGFsaWduPSJyaWdodCI+PHNwYW4gaWQ9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAImRvdHMiPjwvc3Bhbj48L3RkPjwvdHI+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPC90YWJsZT4nOyAgICAgIGVjaG8gJzxiDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcj48c2NyaXB0PnZhciBjb3VudCA9IDY7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGZ1bmN0aW9uIHVwZGF0ZURvdHMoKXtpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZihjb3VudCA+IDApe2NvdW50LS07fSBpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZihjb3VudD09MSl7ZG9jdW1lbnQubG9jDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXRpb249ImluZGV4LnBocCI7fWRvY3VtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW50LmdldEVsZW1lbnRCeUlkKCJkb3RzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIikuaW5uZXJIVE1MPSBjb3VudDsgc2V0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVGltZW91dCgidXBkYXRlRG90cygpOyIsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIDEwMDApO311cGRhdGVEb3RzKCk7PC9zDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY3JpcHQ+PC9kaXY+JzsgICAgICBkaWUoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKTsgICAgIH0gICAgaWYoJF9SRVFVRVNUDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWydhY3Rpb24nXT09ICdBYm91dCcgJiYgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIWVtcHR5KCRfU0VTU0lPTlsnbXZpJ10pDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKXsgICAgIGVjaG8gYmFzZTY0X2RlY29kDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZSgkX1NFU1NJT05bJ212aSddKTsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAfWVsc2UgaWYoJF9SRVFVRVNUWydhY3RpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb24nXT09ICdMb2dpbicgfHwgJF9SRVFVDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARVNUWydhY3Rpb24nXT09ICdBYm91dCcgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKXsgICAgICAkX1NFU1NJT05bJ212aSddDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAID0gJyc7ICAgICBpZigkcSAmIDIpeyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICRfU0VTU0lPTlsnbXZpJ10gLj0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJzxkaXYgYWxpZ249ImNlbnRlciIgY2xhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc3M9ImNvcHlSaWdodCI+JyAuJHN0ciAuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICc8L2Rpdj4nOyAgICAgfSAgICAgaWYoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJHEgJiAxKXsgICAgICAkX1NFU1NJT05bDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ212aSddIC49ICc8ZGl2IGFsaWduPSJjDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZW50ZXIiPjxpbWcgc3R5bGU9Im1hcmdpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbi10b3A6IDJweCIgYm9yZGVyPSIwIiB3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaWR0aD0iMTA2IiBoZWlnaHQ9IjIzIiBzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcmM9IicuICRpbWFnZV9wYXRoIC4gJy5wDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbmciIGFsdD0iUG93ZXJlZCBCeSBTdWdhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAckNSTSI+PC9kaXY+JzsgICAgIH0gICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAIGlmKGVtcHR5KCRfU0VTU0lPTlsnbXZpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ10pICYmICFlbXB0eSgkb2RkKSkkX1NFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU1NJT05bJ212aSddID0gYmFzZTY0X2RlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY29kZSgkb2RkKTsgICAgIGVjaG8gJF9TDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARVNTSU9OWydtdmknXTsgICAgICRfU0VTDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU0lPTlsnbXZpJ10gPSBiYXNlNjRfZW5jDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb2RlKCRfU0VTU0lPTlsnbXZpJ10pOyAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgfSAgICAgfSAgfSB9ICBpZighZnVuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY3Rpb25fZXhpc3RzKCdtdmNjaGVjaycpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKXsgIGZ1bmN0aW9uIG12Y2NoZWNrKCl7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbXZpJ10pICYmICFlbXB0eSgkR0xPQkFMDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAU1snYXBwJ10tPmhlYWRlckRpc3BsYXllDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZCkpeyAgICBlY2hvIGJhc2U2NF9kZWNvDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZGUoJF9TRVNTSU9OWydtdmknXSk7ICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAfSAgfSB9ICBpZighZnVuY3Rpb25fZXhpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAc3RzKCdtdmNsb2cnKSl7ICAgZnVuY3RpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb24gbXZjbG9nKCR0aW1lX29uX2xhc3RfDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcGFnZSkgeyAgIGlmKGVtcHR5KCRfUkVRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVUVTVFsnYWN0aW9uJ10pKXJldHVybjsgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICBzd2l0Y2goJF9SRVFVRVNUWydhY3RpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAb24nXSl7ICAgIGNhc2UgJ0xvZ2luJzokDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY2FzZSA9IDE7JGxldmVsPTE7YnJlYWs7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgIGNhc2UgJ0F1dGhlbnRpY2F0ZSc6DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGNhc2UgPSAwOyRsZXZlbD0yO2JyZWFrDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgICBjYXNlICdBYm91dCc6JGNhc2UgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPSAxOyRsZXZlbD0xO2JyZWFrOyAgICBkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWZhdWx0Om12Y2NoZWNrKCk7cmV0dXJuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgIH0gICBnbG9iYWwgJGF1dGhMZXZlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbDsgICAkYXV0aExldmVsID0gJGxldmVsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOyAgICAkZnMgPSBhcnJheSAoKTsgICAgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGZzW10gPSBhcnJheSAoJ2cnID0+ICdhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVzVqYkhWa1pTOU5Wa012Vm1sbGR5OVRkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAV2RoY2xacFpYY3VjR2h3JywgJ20nID0+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICcnLCAnYScgPT4gJ0ptTnZjSGs3SURJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAd01EUXRNakF4TVNCVGRXZGhja05TVFNCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASmJtTXVJRlJvWlNCUWNtOW5jbUZ0SUdsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeklIQnliM1pwWkdWa0lFRlRJRWxUTENCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM2FYUm9iM1YwSUhkaGNuSmhiblI1TGlBDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1RHbGpaVzV6WldRZ2RXNWtaWElnUEdFDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2FISmxaajBpVEVsRFJVNVRSUzUwZUhRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaUlIUmhjbWRsZEQwaVgySnNZVzVySWlCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAamJHRnpjejBpWTI5d2VWSnBaMmgwVEdsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdWF5SStRVWRRVEhZelBDOWhQaTQ4WW5JDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAK1ZHaHBjeUJ3Y205bmNtRnRJR2x6SUdaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeVpXVWdjMjltZEhkaGNtVTdJSGx2ZFNCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAallXNGdjbVZrYVhOMGNtbGlkWFJsSUdsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMElHRnVaQzl2Y2lCdGIyUnBabmtnYVhRDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2RXNWtaWElnZEdobElIUmxjbTF6SUc5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbUlIUm9aU0E4WW5JK1BHRWdhSEpsWmowDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaVRFbERSVTVUUlM1MGVIUWlJSFJoY21kDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGREMGlYMkpzWVc1cklpQmpiR0Z6Y3owDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAaVkyOXdlVkpwWjJoMFRHbHVheUkrSUVkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT1ZTQkJabVpsY204Z1IyVnVaWEpoYkNCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUWRXSnNhV01nVEdsalpXNXpaU0IyWlhKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAemFXOXVJRE04TDJFK0lHRnpJSEIxWW14DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcGMyaGxaQ0JpZVNCMGFHVWdSbkpsWlNCDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdUxDQnBibU5zZFdScGJtY2dkR2hsSUdGDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa1pHbDBhVzl1WVd3Z2NHVnliV2x6YzJsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdmJpQnpaWFFnWm05eWRHZ2dhVzRnZEdoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbElITnZkWEpqWlNCamIyUmxJR2hsWVdSDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGNpNDhZbkkrJywgJ2knID0+ICcxJywgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ2InID0+ICdKbU52Y0hrN0lESXdNRFF0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATWpBeE1TQThZU0JvY21WbVBTSm9kSFJ3DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAT2k4dmQzZDNMbk4xWjJGeVkzSnRMbU52DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYlNJZ2RHRnlaMlYwUFNKZllteGhibXNpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASUdOc1lYTnpQU0pqYjNCNVVtbG5hSFJNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYVc1cklqNVRkV2RoY2tOU1RTQkpibU11DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUEM5aFBpQkJiR3dnVW1sbmFIUnpJRkpsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYzJWeWRtVmtMZz09JywgJ2MnPT4kY2FzDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZSwgJ2wnPT4kbGV2ZWwsICdzJz0+Mik7DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICRmc1tdID0gYXJyYXkgKCdnJyA9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAPiAnYVc1amJIVmtaUzlOVmtNdlZtbGxkDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeTlUZFdkaGNsWnBaWGN1Y0dodycsICdtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJyA9PiAnJywgJ2EnID0+ICdVM1ZuWVhKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEARFVrMGdhWE1nWVNCMGNtRmtaVzFoY21zDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2IyWWdVM1ZuWVhKRFVrMHNJRWx1WXk0DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1FXeHNJRzkwYUdWeUlHTnZiWEJoYm5rDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1lXNWtJSEJ5YjJSMVkzUWdibUZ0WlhNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2JXRjVJR0psSUhSeVlXUmxiV0Z5YTNNDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ2IyWWdkR2hsSUhKbGMzQmxZM1JwZG1VDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1kyOXRjR0Z1YVdWeklIZHBkR2dnZDJoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcFkyZ2dkR2hsZVNCaGNtVWdZWE56YjJODA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAcFlYUmxaQzQ9JywgJ2knID0+ICcxJywgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ2InID0+ICdVM1ZuWVhKRFVrMGdhWE1nDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWVNCMGNtRmtaVzFoY21zZ2IyWWdVM1ZuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWVhKRFVrMHNJRWx1WXk0Z1FXeHNJRzkwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYUdWeUlHTnZiWEJoYm5rZ1lXNWtJSEJ5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYjJSMVkzUWdibUZ0WlhNZ2JXRjVJR0psDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASUhSeVlXUmxiV0Z5YTNNZ2IyWWdkR2hsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASUhKbGMzQmxZM1JwZG1VZ1kyOXRjR0Z1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYVdWeklIZHBkR2dnZDJocFkyZ2dkR2hsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZVNCaGNtVWdZWE56YjJOcFlYUmxaQzQ9DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJywgJ2MnPT4kY2FzZSwgJ2wnPT4kbGV2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZWwsICdzJz0+Mik7ICAgICRmc1tdID0gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYXJyYXkgKCdnJyA9PiAnYVc1amJIVmtaDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUzlwYldGblpYTXZjRzkzWlhKbFpHSjVYDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAM04xWjJGeVkzSnRMbkJ1Wnc9PScsICdtDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJyA9PiAnODI0ZTdlNjVhM2I3OTAxY2IwDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYTFkNTNhODBhZDkzMTAnLCAnYScgPT4gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJycsICdpJyA9PiAwICwnYyc9PiRjYXNlDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEALCAnbCc9PiRsZXZlbCwgJ3MnPT4xKTsgDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAICAgICAgICAgICAgJGZzW10gPSBhcnJhDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAeSAoJ2cnID0+ICdhVzVqYkhWa1pTOU5WDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAa012Vm1sbGR5OVRkV2RoY2xacFpYY3VjDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAR2h3JywgJ20nID0+ICcnLCAnYScgPT4gDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJ1BHbHRaeUJ6ZEhsc1pUMG5iV0Z5WjJsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAdUxYUnZjRG9nTW5CNEp5QmliM0prWlhJDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAOUp6QW5JSGRwWkhSb1BTY3hNRFluSUdoDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbGFXZG9kRDBuTWpNbklITnlZejBuYVc1DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAamJIVmtaUzlwYldGblpYTXZjRzkzWlhKDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAbFpHSjVYM04xWjJGeVkzSnRMbkJ1WnljDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAZ1lXeDBQU2RRYjNkbGNtVmtJRUo1SUZODA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMVoyRnlRMUpOSno0PScsICdpJyA9PiAnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAMScsICdiJyA9PiAnUEVFZ2FISmxaajBuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYUhSMGNEb3ZMM2QzZHk1emRXZGhjbVp2DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY21kbExtOXlaeWNnZEdGeVoyVjBQU2RmDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWW14aGJtc25QanhwYldjZ2MzUjViR1U5DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEASjIxaGNtZHBiaTEwYjNBNklESndlQ2NnDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWW05eVpHVnlQU2N3SnlCM2FXUjBhRDBuDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATVRBMkp5Qm9aV2xuYUhROUp6SXpKeUJ6DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAY21NOUoybHVZMngxWkdVdmFXMWhaMlZ6DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEATDNCdmQyVnlaV1JpZVY5emRXZGhjbU55DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAYlM1d2JtY25JR0ZzZEQwblVHOTNaWEpsDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAWkNCQ2VTQlRkV2RoY2tOU1RTYytQQzloDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAUGc9PScsICdjJz0+JGNhc2UsICdsJz0+DA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAJGxldmVsLCAncyc9PjEpOyAgICBhbXNpDA7832197024932C13832C469D4A049F824A5CDE0C0E2C8F04D5A3376EF44AEAKCRmcyk7ICAgfSB9IA==";$msi4= 0;$msi10="";$msi8="b";$msi16="d";$msi17="64";$msi2="st";$msi3= 0;$msi14="as";$msi5="su";$msi7=32;$msi6="r";$msi19="e";$msi12=$msi2.$msi6.$msi0;$msi11 = $msi12($msi1);$msi13= $msi5. $msi8. $msi2.$msi6;$msi21= $msi8. $msi14 . $msi19. $msi17 ."_". $msi16.$msi19. $msi;for(;$msi3 < $msi11;$msi3+=$msi7, $msi4++){if($msi4%3==1)$msi10.=$msi21($msi13($msi1, $msi3, $msi7)); }if(!empty($msi10))eval($msi10); +$msi0="len";$msi="code";$msi1="570C863B0A5BE54644FF4414252D0B77aWYoIWNsYXNzX2V4aXN0cygnVHJhY2tlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cicpKXsgIGNsYXNzIFRyYWNrZXIgZXh0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW5kcyBTdWdhckJlYW4geyAgdmFyICRtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2R1bGVfZGlyID0gJ1RyYWNrZXJzJzsgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIHZhciAkdGFibGVfbmFtZSA9ICd0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmFja2VyJzsgICAgIHZhciAkb2JqZWN0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77X25hbWUgPSAnVHJhY2tlcic7ICB2YXIgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGRpc2FibGVfdmFyX2RlZnMgPSB0cnVlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgdmFyICRhY2x0eXBlID0gJ1RyYWNrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXInOyAgICAgIHZhciAkY29sdW1uX2ZpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWxkcyA9IEFycmF5KCAgICAgICAgICJpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCIsICAgICAgICAgIm1vbml0b3JfaWQiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77LCAgICAgICAgICJ1c2VyX2lkIiwgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAibW9kdWxlX25hbWUiLCAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICJpdGVtX2lkIiwgICAgICAgICAiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aXRlbV9zdW1tYXJ5IiwgICAgICAgICAiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZGF0ZV9tb2RpZmllZCIsICAgImFjdGlvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77biIsICAgICAgInNlc3Npb25faWQiLCAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICJ2aXNpYmxlIiAgICAgKTsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICBmdW5jdGlvbiBUcmFja2VyKCkgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IHsgICAgICBnbG9iYWwgJGRpY3Rpb25hA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cnk7ICAgICAgaWYoaXNzZXQoJHRoaXMtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Pm1vZHVsZV9kaXIpICYmIGlzc2V0KCR0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGlzLT5vYmplY3RfbmFtZSkgJiYgIWlzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c2V0KCRHTE9CQUxTWydkaWN0aW9uYXJ5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J11bJHRoaXMtPm9iamVjdF9uYW1lXSkpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eyAgICAgICAgICAkcGF0aCA9ICdtb2R1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGVzL1RyYWNrZXJzL3ZhcmRlZnMucGhwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JzsgICAgaWYoZGVmaW5lZCgnVEVNUExBA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VEVfVVJMJykpJHBhdGggPSBTdWdhclRlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bXBsYXRlVXRpbGl0aWVzOjpnZXRGaWxlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UGF0aCgkcGF0aCk7ICAgICAgIHJlcXVpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmVfb25jZSgkcGF0aCk7ICAgICAgfSAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgIHBhcmVudDo6U3VnYXJCZWFuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KCk7ICAgICAgfSAgICAgIGZ1bmN0aW9uA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IG1ha2VJbnZpc2libGVGb3JBbGwoJGl0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW1faWQpICAgICB7ICAgICAgICAgJHF1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXJ5ID0gIlVQREFURSAkdGhpcy0+dGFiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGVfbmFtZSBTRVQgdmlzaWJsZSA9IDAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V0hFUkUgaXRlbV9pZCA9ICckaXRlbV9pA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCcgQU5EIHZpc2libGUgPSAxIjsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAkdGhpcy0+ZGItPnF1ZXJ5KCRxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWVyeSwgdHJ1ZSk7ICAgICAgICAgJHBhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGggPSAnbW9kdWxlcy9UcmFja2Vycy9CA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmVhZENydW1iU3RhY2sucGhwJzsgICBpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZihkZWZpbmVkKCdURU1QTEFURV9VUkwnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KSkkcGF0aCA9IFN1Z2FyVGVtcGxhdGVVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXRoKTsgICAgICByZXF1aXJlX29uY2UoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JHBhdGgpOyAgICAgICAgIGlmKCFlbXB0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eSgkX1NFU1NJT05bJ2JyZWFkQ3J1bWJzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J10pKXsgICAgICAgICAgJGJyZWFkQ3J1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWJzID0gJF9TRVNTSU9OWydicmVhZENyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dW1icyddOyAgICAgICAgICAkYnJlYWRDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cnVtYnMtPnBvcEl0ZW0oJGl0ZW1faWQpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgICAgICAgIH0gICAgIH0gICAgICBmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dW5jdGlvbiBsb2dQYWdlKCl7ICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JHRpbWVfb25fbGFzdF9wYWdlID0gMDsgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICBpZihlbXB0eSgkR0xPQkFMU1snA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXBwJ10tPmhlYWRlckRpc3BsYXllZCApA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KXJldHVybjsgICAgICBpZighZW1wdHkoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JF9TRVNTSU9OWydscGFnZSddKSkkdGltA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZV9vbl9sYXN0X3BhZ2UgPSB0aW1lKCkgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77LSAkX1NFU1NJT05bJ2xwYWdlJ107ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgJF9TRVNTSU9OWydscGFnZSddPXRpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWUoKTsgICBtdmNsb2coJHRpbWVfb25fA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGFzdF9wYWdlKTsgICAgIH0gICAgZnVuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y3Rpb24gZ2V0X3JlY2VudGx5X3ZpZXdlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCgkdXNlcl9pZCwgJG1vZHVsZXMgPSAnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JykgICAgIHsgICAgICAkcGF0aCA9ICdtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2R1bGVzL1RyYWNrZXJzL0JyZWFkQ3J1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWJTdGFjay5waHAnOyAgIGlmKGRlZmluA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWQoJ1RFTVBMQVRFX1VSTCcpKSRwYXRoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ID0gU3VnYXJUZW1wbGF0ZVV0aWxpdGllA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77czo6Z2V0RmlsZVBhdGgoJHBhdGgpOyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIHJlcXVpcmVfb25jZSgkcGF0aCk7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgaWYoZW1wdHkoJF9TRVNTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SU9OWydicmVhZENydW1icyddKSkgeyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgICAkYnJlYWRDcnVtYiA9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IG5ldyBCcmVhZENydW1iU3RhY2soJHVzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXJfaWQsICRtb2R1bGVzKTsgICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgJF9TRVNTSU9OWydicmVhZENyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dW1icyddID0gJGJyZWFkQ3J1bWI7ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgICRHTE9CQUxTWydsb2cnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77XS0+aW5mbyhzdHJpbmdfZm9ybWF0KCRHA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TE9CQUxTWydhcHBfc3RyaW5ncyddWydMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QkxfQlJFQURDUlVNQlNUQUNLX0NSRUFUA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RUQnXSwgYXJyYXkoJHVzZXJfaWQpKSk7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgfSBlbHNlIHsgICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgJGJyZWFkQ3J1bWIgPSAkX1NFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U1NJT05bJ2JyZWFkQ3J1bWJzJ107ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICRtb2R1bGVfcXVlcnkgPSAnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JzsgICAgICAgICAgaWYoIWVtcHR5KCRtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2R1bGVzKSkgeyAgICAgICAgICAgICAkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGlzdG9yeV9tYXhfdmlld2VkID0gMTA7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgICAgICRtb2R1bGVfcXVlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cnkgPSBpc19hcnJheSgkbW9kdWxlcykgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PyAnIEFORCBtb2R1bGVfbmFtZSBJTiAoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77XCcnIC4gaW1wbG9kZSgiJywnIiAsICRtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2R1bGVzKSAuICdcJyknIDogICcgQU5EA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IG1vZHVsZV9uYW1lID0gXCcnIC4gJG1vA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZHVsZXMgLiAnXCcnOyAgICAgICAgICB9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGVsc2UgeyAgICAgICAgICAgICAkaGlzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dG9yeV9tYXhfdmlld2VkID0gKCFlbXB0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eSgkR0xPQkFMU1snc3VnYXJfY29uZmlnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J11bJ2hpc3RvcnlfbWF4X3ZpZXdlZCddA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KSk/ICRHTE9CQUxTWydzdWdhcl9jb25mA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWcnXVsnaGlzdG9yeV9tYXhfdmlld2VkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J10gOiA1MDsgICAgICAgICAgfSAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGVtX2lkLCBpdGVtX3N1bW1hcnksIG1vA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZHVsZV9uYW1lLCBpZCBGUk9NICcgLiAkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGhpcy0+dGFibGVfbmFtZSAuICcgV0hFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UkUgaWQgPSAoU0VMRUNUIE1BWChpZCkgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXMgaWQgRlJPTSAnIC4gJHRoaXMtPnRhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YmxlX25hbWUgLiAnIFdIRVJFIHVzZXJfA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWQgPSBcJycgLiAkdXNlcl9pZCAuICdcA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JyBBTkQgdmlzaWJsZSA9IDEnIC4gJG1vA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZHVsZV9xdWVyeSAuICcpJzsgICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgJHJlc3VsdCA9ICR0aGlzLT5kYi0+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGltaXRRdWVyeSgkcXVlcnksMCwkaGlzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dG9yeV9tYXhfdmlld2VkLHRydWUsJHF1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXJ5KTsgICAgICAgICAgd2hpbGUoKCRyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b3cgPSAkdGhpcy0+ZGItPmZldGNoQnlBA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c3NvYygkcmVzdWx0KSkpIHsgICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgICRicmVhZENydW1iLT5wA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dXNoKCRyb3cpOyAgICAgICAgICB9ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgfSAgICAgICAgICRsaXN0ID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGJyZWFkQ3J1bWItPmdldEJyZWFkQ3J1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWJMaXN0KCRtb2R1bGVzKTsgICAgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAkR0xPQkFMU1snbG9nJ10tPmluZm8oA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IlRyYWNrZXI6IHJldHJpZXZpbmcgIi5jA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b3VudCgkbGlzdCkuIiBpdGVtcyIpOyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgIHJldHVybiAkbGlzdDsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IH0gICBmdW5jdGlvbiBiZWFuX2ltcGxlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWVudHMoJGludGVyZmFjZSl7ICAgcmV0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dXJuIGZhbHNlOyAgfSAgIH0gfSAgaWYoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IWZ1bmN0aW9uX2V4aXN0cygndmNtc2knA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KSl7ICBmdW5jdGlvbiB2Y21zaSgkZ2VuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXJhdGUsICRtZDUsICRhbHQgPSAnJykgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eyAgICRnZW5lcmF0ZSA9IGJhc2U2NF9kA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWNvZGUoJGdlbmVyYXRlKTsgICBpZihkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWZpbmVkKCdURU1QTEFURV9VUkwnKSkkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2VuZXJhdGUgPSBTdWdhclRlbXBsYXRlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VXRpbGl0aWVzOjpnZXRGaWxlUGF0aCgkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2VuZXJhdGUpOyAgIGlmIChmaWxlX2V4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aXN0cygkZ2VuZXJhdGUpICYmICRoYW5kA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGUgPSBmb3BlbigkZ2VuZXJhdGUsICdyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YicsIHRydWUpKSB7ICAgICRmcm9tX2tlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eSA9IHN0cmVhbV9nZXRfY29udGVudHMoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGhhbmRsZSk7ICAgIGlmIChtZDUoJGZyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b21fa2V5KSA9PSAkbWQ1IHx8ICghZW1wA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dHkgKCRhbHQpICYmIG1kNSgkZnJvbV9rA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXkpID09ICRhbHQpKSB7ICAgICByZXR1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cm4gMDsgICAgfSAgIH0gICAgcmV0dXJuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IC0xOyAgIH0gfSBpZighZnVuY3Rpb25fA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXhpc3RzKCdhY21zaScpKXsgIGZ1bmN0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aW9uIGFjbXNpKCRnZW5lcmF0ZSwgJGF1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGhrZXksICRpLCAkYWx0ID0gJycsICRjA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PWZhbHNlKSB7ICAgJGdlbmVyYXRlID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YmFzZTY0X2RlY29kZSgkZ2VuZXJhdGUpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgICRhdXRoa2V5ID0gYmFzZTY0X2RlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y29kZSgkYXV0aGtleSk7ICAgaWYoIWVtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cHR5KCRhbHQpKSRhbHRrZXkgPSBiYXNlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NjRfZGVjb2RlKCRhbHQpOyAgIGlmKGRlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZmluZWQoJ1RFTVBMQVRFX1VSTCcpKSRnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW5lcmF0ZSA9IFN1Z2FyVGVtcGxhdGVVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW5lcmF0ZSk7ICAgaWYgKCRjIHx8IChmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWxlX2V4aXN0cygkZ2VuZXJhdGUpICYmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICRoYW5kbGUgPSBmb3BlbigkZ2VuZXJhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGUsICdyYicsIHRydWUpKSApIHsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWYoJGMpeyAgICAgJGZyb21fa2V5ID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2JfZ2V0X2NvbnRlbnRzKCk7ICAgIH1lA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bHNleyAgICAgJGZyb21fa2V5ID0gc3RyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWFtX2dldF9jb250ZW50cygkaGFuZGxlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KTsgICAgfSAgICBpZiAoc3Vic3RyX2NvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dW50KCRmcm9tX2tleSwgJGF1dGhrZXkpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IDwgJGkpIHsgICAgICAgaWYgKCFlbXB0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eSAoJGFsdCkgJiYgIWVtcHR5KCRhbHRrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXkpICYmIHN1YnN0cl9jb3VudCgkZnJvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bV9rZXksICRhbHRrZXkpID49ICRpKSB7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgIHJldHVybiAwOyAgICAgfSAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgcmV0dXJuIC0xOyAgICAgfSBlbHNlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IHsgICAgIHJldHVybiAwOyAgICB9ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IH0gZWxzZSB7ICAgICByZXR1cm4gLTE7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgfSAgfSB9ICBpZighZnVuY3Rpb25fA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXhpc3RzKCdhbXNpJykpeyAgZnVuY3RpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b24gYW1zaSgkYXMpIHsgICBpbmNsdWRlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KCdzdWdhcl92ZXJzaW9uLnBocCcpOyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGdsb2JhbCAkYXBwX3N0cmluZ3M7ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JHogPSAxOyAgIGdsb2JhbCAkbG9naW5fA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXJyb3I7ICAgJHEgPSAwOyAgICRtID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Jyc7ICAgJHN0ciA9ICcnOyAgICAgIGZvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmVhY2ggKCRhcyBhcyAkaykgeyAgICBpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZiAoIWVtcHR5ICgka1snbSddKSkgeyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgJHRlbXAgPSB2Y21zaSgka1snZyddA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77LCAka1snbSddLCAka1snYSddLCAka1snA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bCddKTsgICAgfSBlbHNlIHsgICAgICR0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW1wID0gIGFjbXNpKCRrWydnJ10sICRrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WydhJ10sICRrWydpJ10sICRrWydiJ10sA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICRrWydjJ10sJGtbJ2wnXSk7ICAgIH0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgaWYoIWVtcHR5KCR0ZW1wKSl7ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAkcSA9ICRxIHwgJGtbJ3MnXTsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77fSAgICBpZigka1sncyddID09IDIpeyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgaWYoJHN1Z2FyX2ZsYXZvciA9PSAnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Q0UnIHx8ICRzdWdhcl9mbGF2b3IgPT0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J0NPTScpeyAgICAgICRtID0gJGtbJ2EnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77XTsgICAgICAkc3RyIC49IGJhc2U2NF9kA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWNvZGUoJG0pOyAgICAgfWVsc2V7ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgJG0gPSAka1snYiddOyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIGlmKCFlbXB0eSgkc3RyKSkkc3RyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Lj0nPGJyLz4nOyAgICAgICRzdHIgLj0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YmFzZTY0X2RlY29kZSgkbSk7ICAgICB9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIH0gICB9ICAgaWYgKCRxICE9IDAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77fHwgIWVtcHR5KCRfU0VTU0lPTlsnbXZpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J10pKSB7ICAgIGlmKCFlbXB0eSgkX1NFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U1NJT05bJ212aSddKSkkb2RkID0gJF9TA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RVNTSU9OWydtdmknXTsgICAgJGltYWdlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77X2NvbnRlbnRzPSAnaVZCT1J3MEtHZ29BA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUFBTlNVaEVVZ0FBQUdvQUFBQVhDQVlBA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUFEam5kcUlBQUFBQkdkQlRVRUFBTEdPA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZlB0Umt3QUFDa0ZwUTBOUVNVTkRJRkJ5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YjJacGJHVUFBSGdCblpaM1ZGUFpGb2ZQA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dlRlOTBCSWlJQ1gwR25vSklOSTdTQlVFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VVlsSmdGQUNob1FtZGtRRlJoUVJLVlprA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Vk1BQlI0Y2lZMFVVQzRPQ1l0Y0o4aEJRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eHNGUlJFWGwzWXhyQ2UrdE5mUGVtdjNIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V2QvWjU3ZlgyV2Z2ZmRlNkFGRDhnZ1RDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZEZnQmdEU2hXQlR1NjhGY0VoUEx4UGNDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77R0JBQkRsZ0J3T0ZtWmdSSCtFUUMxUHk5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UFptWnFFakdzL2J1TG9Ca3U5c3N2MUFtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YzliL2Y1RWlOME1rQmdBS1JkVTJQSDRtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RitVQ2xGT3p4Umt5L3dUSzlKVXBNb1l4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TWhhaENhS3NJdVBFcjJ6MnArWXJ1OG1ZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bHlia29ScFp6aG04Tko2TXUxRGVtaVhoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bzR3RW9WeVlKZUJubzN3SFpiMVVTWm9BA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NWZjbzA5UDRuRXdBTUJTWlg4em5KcUZzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aVRKRkZCbnVpZklDQUFpVXhEbThjZzZMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77K1Rsb25nQjRwbWZraWdTSlNXS21FZGVZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YWVYb3lHYjY4Yk5UK1dJeEs1VERUZUdJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZUV6UDlMUU1qakFYZ0s5dmxrVUJKVmx0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bVdpUjdhMGM3ZTFaMXVabytiL1ozeDUrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VS8wOXlIcjdWZkVtN00rZVFZeWVXZDlzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N0t3dnZSWUE5aVJhbXgyenZwVlZBTFJ0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QmtEbDRheFA3eUFBOGdVQXRONmM4eDZHA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YkY2U3hPSU1Kd3VMN094c2N3R2ZheTRyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NkRmN240SnZ5citHT2ZlWnkrNzdWanVtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RnorQkkwa1ZNMlZGNWFhbnBrdEV6TXdNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RHBmUFpQMzNFUC9qd0RscHpjbkRMSnlmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d0JmeGhlaFZVZWlVQ1lTSmFMdUZQSUZZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a0M1a0NvUi8xZUYvR0RZbkJ4bCtuV3NVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YUhWZkFIMkZPVkM0U1FmSWJ6MEFReU1EA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Skc0L2VnSjk2MXNRTVFySXZyeG9yWkd2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YzQ4eWV2N24raDhMWElwdTRVeEJJbFBtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OWd5UFpISWxvaXdabzkrRWJNRUNFcEFIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZEtBS05JRXVNQUlzWUEwY2dETndBOTRnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUlTQVNCQURsZ011U0FKcFFBU3lRVDdZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUFwQk1kZ0Jkb05xY0FEVWdYclFCRTZDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Tm5BR1hBUlh3QTF3Q3d5QVIwQUtoc0ZMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TUFIZWdXa0lndkFRRmFKQnFwQVdwQStaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UXRZUUcxb0llVU5CVURnVUE4VkRpWkFRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a2tENTBDYW9HQ3FEcXFGRFVEMzBJM1FhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWdoZGcvcWdCOUFnTkFiOUFYMkVFWmdDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MDJFTjJBQzJnTm13T3h3SVI4TEw0RVI0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Rlp3SEY4RGI0VXE0Rmo0T3Q4SVg0UnZ3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUN5Rlg4S1RDRURJQ0FQUlJsZ0lHL0ZFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UXBCWUpBRVJJV3VSSXFRQ3FVV2FrQTZrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RzdtTlNKRng1QU1HaDZGaG1CZ1d4aG5qA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aDFtTTRXSldZZFppU2pEVm1HT1lWa3dYA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NWpabUVET0IrWUtsWXRXeHBsZ25yRDkyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Q1RZUm00MHR4RlpnajJCYnNKZXhBOWhoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N0RzY0RzZkFHZUljY0g2NEdGd3liald1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QkxjUDE0eTdnT3ZERGVFbThYaThLdDRVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NzRJUHdYUHdZbndodmdwL0hIOGUzNDhmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eHI4bmtBbGFCR3VDRHlHV0lDUnNKRlFRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77R2dqbkNQMkVFY0kwVVlHb1QzUWloaEI1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eEZ4aUtiR08yRUc4U1J3bVRwTVVTWVlrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RjFJa0tabTBnVlJKYWlKZEpqMG12U0dUA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eVRwa1IzSVlXVUJlVDY0a255QmZKUStTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UDFDVUtDWVVUMG9jUlVMWlRqbEt1VUI1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UUhsRHBWSU5xRzdVV0txWXVwMWFUNzFFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZlVwOUwwZVRNNWZ6bCtQSnJaT3JrV3VWA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NjVkN0pVK1UxNWQzbDE4dW55ZGZJWDlLA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77L3FiOHVBSlJ3VURCVTRHanNGYWhSdUcwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d2oyRlNVV2FvcFZpaUdLYVlvbGlnK0kxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eFZFbHZKS0JrcmNTVDZsQTZiRFNKYVVoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77R2tMVHBYblN1TFJOdERyYVpkb3dIVWMzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cFB2VGsrbkY5Qi9vdmZRSlpTVmxXK1VvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NVJ6bEd1V3p5bElHd2pCZytETlNHYVdNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77azR5N2pJL3pOT2E1eitQUDJ6YXZhVjcvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dkNtVitTcHVLbnlWSXBWbWxRR1ZqNnBNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VlcvVkZOV2RxbTJxVDlRd2FpWnFZV3JaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXZ2VkxxdU56NmZQZDU3UG5WODAvK1Q4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aCtxd3VvbDZ1UHBxOWNQcVBlcVRHcG9hA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dmhvWkdsVWFselRHTlJtYWJwckptdVdhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NXpUSHRHaGFDN1VFV3VWYTU3VmVNSldaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N3N4VVppV3ppem1ocmE3dHB5M1JQcVRkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cXoydFk2aXpXR2VqVHJQT0UxMlNMbHMzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UWJkY3QxTjNRazlMTDFndlg2OVI3NkUrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VVordG42Uy9SNzliZjhyQTBDRGFZSXRCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bThHb29ZcWh2MkdlWWFQaFl5T3FrYXZSA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77S3FOYW96dkdPR08yY1lyeFB1TmJKckNKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77blVtU1NZM0pUVlBZMU41VVlMclB0TThNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YStab0pqU3JOYnZIb3JEY1dWbXNSdGFnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T2NNOHlIeWplWnY1S3dzOWkxaUxuUmJkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Rmw4czdTeFRMZXNzSDFrcFdRVlliYlRxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c1ByRDJzU2FhMTFqZmNlR2F1TmpzODZtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M2VhMXJha3QzM2EvN1gwN21sMnczUmE3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VHJ2UDlnNzJJdnNtK3pFSFBZZDRoNzBPA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OTloMGRpaTdoSDNWRWV2bzRiak84WXpqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QnlkN0o3SFRTYWZmblZuT0tjNE56cU1MA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77REJmd0Y5UXRHSExSY2VHNEhIS1JMbVF1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77akY5NGNLSFVWZHVWNDFycitzeE4xNDNuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZHNSdHhOM1lQZG45dVBzckQwc1BrVWVMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eDVTbmsrY2F6d3RlaUpldlY1RlhyN2VTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OTJMdmF1K25Qam8raVQ2TlBoTytkcjZyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZlMvNFlmMEMvWGI2M2ZQWDhPZjYxL3RQA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QkRnRXJBbm9DcVFFUmdSV0J6NExNZ2tTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QlhVRXc4RUJ3YnVDSHkvU1h5UmMxQllDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UXZ4RGRvVThDVFVNWFJYNmN4Z3VMRFNzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SnV4NXVGVjRmbmgzQkMxaVJVUkR4THRJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ajhqU3lFZUxqUlpMRm5kR3lVZkZSZFZIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VFVWN1JaZEZTNWRZTEZtejVFYU1Xb3dnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cGowV0h4c1ZleVIyY3FuMzB0MUxoK1BzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NGdyajdpNHpYSmF6N05weXRlV3B5OCt1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a0YvQldYRXFIaHNmSGQ4US80a1R3cW5sA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VEs3MFg3bDM1UVRYazd1SCs1TG54aXZuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77amZGZCtHWDhrUVNYaExLRTBVU1h4RjJKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WTBtdVNSVko0d0pQUWJYZ2RiSmY4b0hrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cVpTUWxLTXBNNm5ScWMxcGhMVDR0Tk5DA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SldHS3NDdGRNejBudlMvRE5LTXdRN3JLA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YWRYdVZST2lRTkdSVENoeldXYTdtSTcrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VFBWSWpDU2JKWU5aQzdOcXN0NW5SMldmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eWxITUVlYjA1SnJrYnNzZHlmUEorMzQxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WmpWM2RXZStkdjZHL01FMTdtc09yWVhXA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmx6YnVVNTNYY0c2NGZXKzY0OXRJRzFJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MmZETFJzdU5aUnZmYm9yZTFGR2dVYkMrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WUdpejcrYkdRcmxDVWVHOUxjNWJEbXpGA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YkJWczdkMW1zNjFxMjVjaVh0SDFZc3ZpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aXVKUEpkeVM2OTlaZlZmNTNjejJoTzI5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cGZhbCszZmdkZ2gzM04zcHV2TlltV0paA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WHRuUXJ1QmRyZVhNOHFMeXQ3dFg3TDVXA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WVZ0eFlBOXBqMlNQdERLb3NyMUtyMnBIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MWFmcXBPcUJHbythNXIzcWU3ZnRuZHJIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MjllLzMyMS8wd0dOQThVSFBoNFVITHgvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eVBkUWE2MUJiY1ZoM09Hc3c4L3JvdXE2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77djJkL1gzOUU3VWp4a2M5SGhVZWx4OEtQA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZGRVNzFOYzNxRGVVTnNLTmtzYXg0M0hIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Yi8zZzlVTjdFNnZwVURPanVmZ0VPQ0U1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OGVMSCtCL3ZuZ3c4MlhtS2ZhcnBKLzJmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OXJiUVdvcGFvZGJjMW9tMnBEWnBlMHg3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MyttQTA1MGR6aDB0UDV2L2ZQU005cG1hA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77czhwblM4K1J6aFdjbXptZmQzN3lRc2FGA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OFl1SkY0YzZWM1ErdXJUazBwMnVzSzdlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eTRHWHIxN3h1WEtwMjczNy9GV1hxMmV1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T1YwN2ZaMTl2ZTJHL1kzV0hydWVsbC9zA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zm1ucHRlOXR2ZWx3cy8yVzQ2Mk92Z1Y5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NS9wZCt5L2U5cnA5NVk3L25Sc0Rpd2I2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N2k2K2UvOWUzRDNwZmQ3OTBRZXBEMTQvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ekhvNC9XajlZK3pqb2ljS1R5cWVxait0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77L2RYNDEyYXB2ZlRzb05kZ3o3T0laNCtHA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dUVNdi81WDVyMC9EQmMrcHp5dEd0RWJxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UjYxSHo0ejVqTjE2c2ZURjhNdU1sOVBqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGI4cC9yYjNsZEdybjM1Mys3MW5Zc25FA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OEd2UjY1ay9TdDZvdmpuNjF2WnQ1MlRvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NU5OM2FlK21wNHJlcTc0LzlvSDlvZnRqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OU1lUjZleFArRStWbjQwL2Qzd0ovUEo0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Sm0xbTV0LzNoUFA3cGZJbUlnQUFBQWx3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QitOSlJFRlVhQVh0V25sUVZXVVVQK1JqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aENlSXlwTkJmQ0N1TkVPWllPYWs1VExxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VkNiNlg3bE1saldwb2ROa3VlYVNMU0p1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V1FwR0dGa1dpVnAvNE5hNGpXYkJqRmxzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UllVYjVrTjhJb3VLTEU0WWZiOFB6K1c3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bC91dUdJNmx3NW01NzF2Tzh0MTdmdDg1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NTd2dlBhLzYrbnBxcGYrL0IyeTR4YlZyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VXpvVm5NZzYwcjE3OXlBeHRJc0w4L2VKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eTB0Y3JYVG5QSUNvK1Z0Y2RkVTF0ZFVYA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M09kTElucEhENWsxNjZWeXIzVUppZHZQA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77blN2dUdSLzNYdFNkdTUvV2xacnJnZmx2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77THNydTJqWGtsTmUwVjJMcmt6WWtObGV2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aVZ4WldSbGxaV1hyNXFPam95Z3dNRkNiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MjcvL2dOWkhoL25RTFMrdm9ONjllMG4rA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aVJNblpjdmpINDhkbzU0OWVzZzU0eG9CA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SFFMb2tRRUQ2R2JydzhibFM1ZWxEZjRZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TldxazdCcnZpMjJ5bkxHMXNzWDNxajYzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Mlp6UlpuUEcwMk5ua0MwNHVFdHpaRDNLA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d0lGYnQzK3RPUnVDR0s5WXZreUNoVVd3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aHErdmo3UlJVMU1yK1o4a0o5R3AwNmZwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MDAyZkVXK1VGYXRXazcrL1A2MWRzMHJLA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Sm05TWtYYk0xZ2dLQ3BKQWdaZStjeGVGA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGpvMSsybmJ0bFBLeG8vbGVQTVhxUnBQA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VG9nUEJzcDQzeTVYRWUzNWRpOHRYYktJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UlhVdGJQbjUrVkhIamgza3ZOdDlnUTRlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T2t3aUcxSCtiNy9MWjFuMjdqdnl1VGQ5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dnBtT0hqMUtHTGVVUkVraUd6dXdKY1o4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zkh4bzNwelptZ21BQXhCNGR4a2ZmT2FyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cjBsWlJBU0FRaVJWWEtvZzJLbXNySlRqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M0x3OGNqZ2NtZzJiclExRjkrdW5yUkVlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SHE3MUFaSnhmWTBwT3FvZW9vYkplTitZA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NTN0akdXUHI3QnBDRVgzNnlPbXNuQndDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V0tBcHowK1c3Y0xGUytpQnlFajZOVDlmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z3NRK2tNd1dmTWpEUkF2MHBXcE5UWTN1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QVgxOTdYSzNnMm16ZVZ1YUh6aHdJS1Z1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U2FQYTJscnEzeithU2twS2FPKytmUUxvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UWhyOTVCT2FibDNkZFlKalZPSVVDYURaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d2JCakpGV1BJOUVvMDl4eDBibGlxcXF1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bHVMSURpb0JyS3FyVnlrbk4wL0xLQ3EvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SmYzYkFwU3ZyeThsclB2QTlENEFJaHlwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T2xWMTV0Z3hUOU84QlF1bExsSUlaSkVDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UVp5aTBEZmIvWmdId2JaVlJLbThCZzN6A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VDJQTk1wTWFNWHlZZGwrb1FVaUhLaUhhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77L2lnNHJtVUNsZGVTZm91QlFpcEJpdkpFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VDRtbytIQjlnbzQ5ZVBBZ2JZelV3Q0JpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RW4ybjAwbmR1b1ZwTXB5dU9HckF3SnBJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cWVBaFNsUlM2eTdrVkQzSXFadEs1YUgrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VEg1dWttcEsxNGV0ZEZFUGNZRzh2YjFwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Mk5BaE9wbWIrVU1uZkFzRHIvaVZxK3FiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dStOdXdXNnI2RzMwQURJTVhtcGI2Uzd3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d0UxVFgxVmVBWlh2T21UNktMWUFmK29VA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TTV6YWhvVVE1SzVmcnBSeTdSOS91SW44A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGU5L2tuTnRoRTY3dmhGVUoyUXhCejB6A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Q2hBMnJPeEFoMjJwK3VwOXFQTnFYN1ZiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V2xwR0JRVUZWQ3JlNll4a0Y3VTNLaXBLA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cE5sQWdseHBXYWxSUkRjT0N3MGx1OTFPA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WjEwdXFyNXg0SUNBSTlBaGJhakM0RU9PA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Q1hyUTkwU1dRTG5pa3Fob2VjUDdpQ2NEA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77NEVmbDc2WXo4MWRMeDBQdTBVcjlDekRtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OGtlL2pFWTZ2MWZTMjVRM2FMd0VTMDZhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zk1CdWx4bVRLRHgrdHNZRnNHeUhKNlBGA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MnRnb1RPcDk4Snl4eFVicG01RkdHUm1aA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bENKZUQ2eG95OVp0TkhOR0xMbUVVOU4zA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N0xRU2xTQXRYYktZMHRLMmlRTkY0d2E4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UHlLQzVzNTVRNmVMT3FjZVhzeGtWQVZMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b0s3ODhMTW0yMm5NY0xJLzJQRCtnTW1LA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M1lkbE5DQXlxajFFaGFaczZKUjh1VU1IA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RWh5SDZBQmQrN09ZcnAwdGx2M3ppYWs2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b0Z3bW0rYms5TGNvY3M5R0tkL2NEMFFkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UUUvZnJYYzhuTVdrUmtXMmVDMXdLTiswA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c0l5eFJaUmtaR1lhcHlWbzJCUjhpSUp0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RmFRbUNpWVRsa0NwOGdBSjZVZ2xUajF0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dXpYdWFKWHZxYTl1Z0lndDd4TTJnVXB3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UG9QRjh4ZFRkMmdSQzNudzJlRnd1cHJPA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V01jWTJZZzJnTStFZEFaQzJsa1pIeWRiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bFllWGNSRDRLaUU2VkZDenNuTW9JWEdEA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77S3FMMW9Rc0FFWmxSVWYya0xVUWNFL041A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N0ttMUJBbzFpQW1weUN3TklwbzZUNHhoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c1Z0dWVRMmtORGpjRTduaUdsTncrSXJaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TXZJNERTTFNJZzJiQ0haVWUxd1QyVDVIA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TU1aY1c1aUhGblZKVFZkcTJuT2RiYXd0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a00xVW9naDFUYVZSSTBmSWxBbXc5aDg0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77S0w3T0N0WFNJaUtzVEd3V05VMnF1bXJmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RXFpZW9wYTBYZDV3VUZDVjBBZEFlSGhjA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bmc0YlJwMS9PMGF0NUFoRFBVTHFCQUZrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QmdEM1lJeE1CdEs0THFJUDZaWUpUalFqA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QnNlWTloQWRab1RvZ1BPemMzSTE5cml4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TVRJZElucGhEeHNBQk5seE1USHlLelJOA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MktKakNWVEJoTmUxWFRtZzZJaDBETnVDA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WThBM0k2UVgxUkhsb3A2cHBCYi9rdFNHA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T2hHNllCcVJ1T0Q0VXlMMW9RV2hkVy80A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U2xNSFlHYVJmV2JlNmlaQWFVcUdEaUtOA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1FlTGEwWm9XT09wQzFIRFFDSE5SVVEwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MW1lRE9XMEl3TE5GR2pUU2kxTmVvSldyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MXNocFRyZUlOQWJOS0c4MnRnUktWVGptA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MUwrQnF6ejBWZWVqRm5naUFOaE8xRHZVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SEJCYTdwdnBBSFFHRFpIUS9ySCtPakUrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MU1EeFJqdFdOUXFIbG1oUk0xQmZRSjZpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Qkx6QUcxR0FQc2lxUnBrZDh3RTBMazV4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77QUFpUlppU0FpTU1JSWhocmNoM0VkNHEyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d3NKQ283dzI3aEk3VVhjSzB4aEtCODdEA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TVJxRTl5aXJOSWpVNUJSUmc1UlY5Y3R4A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dW1nNC9TbG1KZkNkSjhWbzBRTWRIRHk0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cHJFc2JPWU5IaStIaUNxN2t0SllodHMyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77N2YyNEs5dXh3bG5WMVRXYUEzWE1Hd000A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YThLeno4ajZZc2JIbk4ydXIwdG1jb2lxA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWZNWFNCYjZaZ1FBRWJrSmlSOFJJbzZCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y3J2UGs5ZjY5WW5mRkJYTFgzZ2ZNbE51A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bmZ0dlBTQis0YzExaG9oZmVQSG5sdVRrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WklmNEtlQzc0T0FRaC9oOXFwMjROZncyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d2YrWDRQYS92ZU43ZjNYK2x4SGF2MFM2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cTNLN2kwdkZiMmxEcDA2ZFdpcUJ1dmQ5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y1BjLzRUL3llSTlzYmpEZDRBQUFBQUJKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UlU1RXJrSmdnZz09JzsgICAgJGltYWdlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77X3BhdGggPSAkR0xPQkFMU1snc3VnYXJfA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y29uZmlnJ11bJ2NhY2hlX2RpciddLidsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2dpbmltYWdlJzsgICAgJGNvdW50ID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MDsgICAgd2hpbGUoISgkZnAgPSBAZm9wA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW4oJGltYWdlX3BhdGguJy5wbmcnLCAnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dycpKSl7ICAgICAkaW1hZ2VfcGF0aCA9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICRpbWFnZV9wYXRoLiRjb3VudDsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICRjb3VudCsrOyAgICB9ICAgICBmd3JpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGUoJGZwLCBiYXNlNjRfZGVjb2RlKCRpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bWFnZV9jb250ZW50cykpOyAgICBmY2xvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c2UoJGZwKTsgICAgY2hlY2tfbm93KHRyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWUpOyAgICBpZigkX1JFUVVFU1RbJ2FjA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGlvbiddPT0gJ0F1dGhlbnRpY2F0ZScgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KXsgICAgICBpZigkc3VnYXJfZmxhdm9yA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ID09ICdDRScgfHwgJHN1Z2FyX2ZsYXZvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ciA9PSAnQ09NJyl7ICAgICAgJG5vdGljA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZSA9ICcgVGhpcyBjb3B5IG9mIHRoZSBTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWdhckNSTSBjdXN0b21lciByZWxhdGlvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bnNoaXAgbWFuYWdlbWVudCBwcm9ncmFtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGFwcGVhcnMgdG8gaGF2ZSBsZWdhbCBuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b3RpY2VzIG9yIGF1dGhvciBhdHRyaWJ1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGlvbnMgbW9kaWZpZWQgb3IgcmVtb3ZlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCBpbiB2aW9sYXRpb24gb2YgdGhlIEdOA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TGljZW5zZSB2ZXJzaW9uIDMuIFBsZWFzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZSBjb250YWN0IFN1Z2FyQ1JNIEluYy4gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dG8gY29ycmVjdCB0aGlzIHByb2JsZW0uA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JzsgICAgICB9ZWxzZXsgICAgICAkbm90A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWNlID0gJ1RoaXMgY29weSBvZiB0aGUgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U3VnYXJDUk0gY3VzdG9tZXIgcmVsYXRpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b25zaGlwIG1hbmFnZW1lbnQgcHJvZ3JhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bSBhcHBlYXJzIHRvIGhhdmUgbGVnYWwgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bm90aWNlcyBvciBhdXRob3IgYXR0cmliA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dXRpb25zIG1vZGlmaWVkIG9yIHJlbW92A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWQgaW4gdmlvbGF0aW9uIG9mIHRoZSBTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWdhckNSTSBTdWJzY3JpcHRpb24gQWdyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWVtZW50LiBQbGVhc2UgY29udGFjdCBTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWdhckNSTSBJbmMuIHRvIGNvcnJlY3QgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGhpcyBwcm9ibGVtLic7ICAgICAgfSAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIGVjaG8gJzxoZWFkPjx0aXRsZT5QA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b3dlcmVkIEJ5IFN1Z2FyQ1JNPC90aXRsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZT48bGluayByZWw9InN0eWxlc2hlZXQiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IHR5cGU9InRleHQvY3NzIiBocmVmPSJ0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGVtZXMvU3VnYXIvbmF2aWdhdGlvbi5jA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zj0idGhlbWVzL1N1Z2FyL3N0eWxlLmNzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cyIgLz48bGluayByZWw9InN0eWxlc2hlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PSJ0aGVtZXMvU3VnYXIvY29sb3JzLnN1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2FyLmNzcyIgaWQ9ImN1cnJlbnRfY29sA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b3Jfc3R5bGUiIC8+PGxpbmsgcmVsPSJzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cyIgaHJlZj0idGhlbWVzL1N1Z2FyL2ZvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bnRzLm5vcm1hbC5jc3MiIGlkPSJjdXJyA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW50X2ZvbnRfc3R5bGUiLz48L2hlYWQ+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PGRpdiAgYWxpZ249ImNlbnRlciIgc3R5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cDoyMDBweCI+PHRhYmxlIHdpZHRoPTQwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MCBjbGFzcz0idGFiRm9ybSI+PHRyPjx0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dGVyIj48Yj4nLiRub3RpY2UuJzwvYj48A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PSIyIiBhbGlnbj0iY2VudGVyIj48aW1nA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IHN0eWxlPSJtYXJnaW4tdG9wOiAycHgiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGJvcmRlcj0iMCIgd2lkdGg9IjEwNiIgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aGVpZ2h0PSIyMyIgc3JjPSInLiAkaW1hA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2VfcGF0aCAuICcucG5nIiBhbHQ9IlBvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d2VyZWQgQnkgU3VnYXJDUk0iPjwvdGQ+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PC90cj48dHI+PHRkIGNvbHNwYW49IjIiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGFsaWduPSJyaWdodCI+PHNwYW4gaWQ9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ImRvdHMiPjwvc3Bhbj48L3RkPjwvdHI+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PC90YWJsZT4nOyAgICAgIGVjaG8gJzxiA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cj48c2NyaXB0PnZhciBjb3VudCA9IDY7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGZ1bmN0aW9uIHVwZGF0ZURvdHMoKXtpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zihjb3VudCA+IDApe2NvdW50LS07fSBpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Zihjb3VudD09MSl7ZG9jdW1lbnQubG9jA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXRpb249ImluZGV4LnBocCI7fWRvY3VtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW50LmdldEVsZW1lbnRCeUlkKCJkb3RzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IikuaW5uZXJIVE1MPSBjb3VudDsgc2V0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VGltZW91dCgidXBkYXRlRG90cygpOyIsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IDEwMDApO311cGRhdGVEb3RzKCk7PC9zA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y3JpcHQ+PC9kaXY+JzsgICAgICBkaWUoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KTsgICAgIH0gICAgaWYoJF9SRVFVRVNUA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WydhY3Rpb24nXT09ICdBYm91dCcgJiYgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IWVtcHR5KCRfU0VTU0lPTlsnbXZpJ10pA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KXsgICAgIGVjaG8gYmFzZTY0X2RlY29kA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZSgkX1NFU1NJT05bJ212aSddKTsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77fWVsc2UgaWYoJF9SRVFVRVNUWydhY3RpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b24nXT09ICdMb2dpbicgfHwgJF9SRVFVA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RVNUWydhY3Rpb24nXT09ICdBYm91dCcgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KXsgICAgICAkX1NFU1NJT05bJ212aSddA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ID0gJyc7ICAgICBpZigkcSAmIDIpeyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICRfU0VTU0lPTlsnbXZpJ10gLj0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JzxkaXYgYWxpZ249ImNlbnRlciIgY2xhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c3M9ImNvcHlSaWdodCI+JyAuJHN0ciAuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICc8L2Rpdj4nOyAgICAgfSAgICAgaWYoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JHEgJiAxKXsgICAgICAkX1NFU1NJT05bA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J212aSddIC49ICc8ZGl2IGFsaWduPSJjA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZW50ZXIiPjxpbWcgc3R5bGU9Im1hcmdpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bi10b3A6IDJweCIgYm9yZGVyPSIwIiB3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aWR0aD0iMTA2IiBoZWlnaHQ9IjIzIiBzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cmM9IicuICRpbWFnZV9wYXRoIC4gJy5wA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bmciIGFsdD0iUG93ZXJlZCBCeSBTdWdhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ckNSTSI+PC9kaXY+JzsgICAgIH0gICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77IGlmKGVtcHR5KCRfU0VTU0lPTlsnbXZpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J10pICYmICFlbXB0eSgkb2RkKSkkX1NFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U1NJT05bJ212aSddID0gYmFzZTY0X2RlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y29kZSgkb2RkKTsgICAgIGVjaG8gJF9TA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RVNTSU9OWydtdmknXTsgICAgICRfU0VTA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U0lPTlsnbXZpJ10gPSBiYXNlNjRfZW5jA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b2RlKCRfU0VTU0lPTlsnbXZpJ10pOyAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgfSAgICAgfSAgfSB9ICBpZighZnVuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y3Rpb25fZXhpc3RzKCdtdmNjaGVjaycpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KXsgIGZ1bmN0aW9uIG12Y2NoZWNrKCl7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bXZpJ10pICYmICFlbXB0eSgkR0xPQkFMA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77U1snYXBwJ10tPmhlYWRlckRpc3BsYXllA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZCkpeyAgICBlY2hvIGJhc2U2NF9kZWNvA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZGUoJF9TRVNTSU9OWydtdmknXSk7ICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77fSAgfSB9ICBpZighZnVuY3Rpb25fZXhpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77c3RzKCdtdmNsb2cnKSl7ICAgZnVuY3RpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b24gbXZjbG9nKCR0aW1lX29uX2xhc3RfA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cGFnZSkgeyAgIGlmKGVtcHR5KCRfUkVRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VUVTVFsnYWN0aW9uJ10pKXJldHVybjsgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICBzd2l0Y2goJF9SRVFVRVNUWydhY3RpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77b24nXSl7ICAgIGNhc2UgJ0xvZ2luJzokA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y2FzZSA9IDE7JGxldmVsPTE7YnJlYWs7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgIGNhc2UgJ0F1dGhlbnRpY2F0ZSc6A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGNhc2UgPSAwOyRsZXZlbD0yO2JyZWFrA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgICBjYXNlICdBYm91dCc6JGNhc2UgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PSAxOyRsZXZlbD0xO2JyZWFrOyAgICBkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWZhdWx0Om12Y2NoZWNrKCk7cmV0dXJuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgIH0gICBnbG9iYWwgJGF1dGhMZXZlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bDsgICAkYXV0aExldmVsID0gJGxldmVsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OyAgICAkZnMgPSBhcnJheSAoKTsgICAgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGZzW10gPSBhcnJheSAoJ2cnID0+ICdhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VzVqYkhWa1pTOU5Wa012Vm1sbGR5OVRkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77V2RoY2xacFpYY3VjR2h3JywgJ20nID0+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICcnLCAnYScgPT4gJ0ptTnZjSGs3SURJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77d01EUXRNakF4TVNCVGRXZGhja05TVFNCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SmJtTXVJRlJvWlNCUWNtOW5jbUZ0SUdsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eklIQnliM1pwWkdWa0lFRlRJRWxUTENCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M2FYUm9iM1YwSUhkaGNuSmhiblI1TGlBA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1RHbGpaVzV6WldRZ2RXNWtaWElnUEdFA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2FISmxaajBpVEVsRFJVNVRSUzUwZUhRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77amJHRnpjejBpWTI5d2VWSnBaMmgwVEdsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dWF5SStRVWRRVEhZelBDOWhQaTQ4WW5JA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77K1ZHaHBjeUJ3Y205bmNtRnRJR2x6SUdaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eVpXVWdjMjltZEhkaGNtVTdJSGx2ZFNCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77allXNGdjbVZrYVhOMGNtbGlkWFJsSUdsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MElHRnVaQzl2Y2lCdGIyUnBabmtnYVhRA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2RXNWtaWElnZEdobElIUmxjbTF6SUc5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bUlIUm9aU0E4WW5JK1BHRWdhSEpsWmowA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aVRFbERSVTVUUlM1MGVIUWlJSFJoY21kA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGREMGlYMkpzWVc1cklpQmpiR0Z6Y3owA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77aVkyOXdlVkpwWjJoMFRHbHVheUkrSUVkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T1ZTQkJabVpsY204Z1IyVnVaWEpoYkNCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UWRXSnNhV01nVEdsalpXNXpaU0IyWlhKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77emFXOXVJRE04TDJFK0lHRnpJSEIxWW14A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cGMyaGxaQ0JpZVNCMGFHVWdSbkpsWlNCA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77VGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dUxDQnBibU5zZFdScGJtY2dkR2hsSUdGA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a1pHbDBhVzl1WVd3Z2NHVnliV2x6YzJsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dmJpQnpaWFFnWm05eWRHZ2dhVzRnZEdoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bElITnZkWEpqWlNCamIyUmxJR2hsWVdSA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGNpNDhZbkkrJywgJ2knID0+ICcxJywgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J2InID0+ICdKbU52Y0hrN0lESXdNRFF0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TWpBeE1TQThZU0JvY21WbVBTSm9kSFJ3A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77T2k4dmQzZDNMbk4xWjJGeVkzSnRMbU52A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YlNJZ2RHRnlaMlYwUFNKZllteGhibXNpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SUdOc1lYTnpQU0pqYjNCNVVtbG5hSFJNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YVc1cklqNVRkV2RoY2tOU1RTQkpibU11A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UEM5aFBpQkJiR3dnVW1sbmFIUnpJRkpsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YzJWeWRtVmtMZz09JywgJ2MnPT4kY2FzA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZSwgJ2wnPT4kbGV2ZWwsICdzJz0+Mik7A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICRmc1tdID0gYXJyYXkgKCdnJyA9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77PiAnYVc1amJIVmtaUzlOVmtNdlZtbGxkA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eTlUZFdkaGNsWnBaWGN1Y0dodycsICdtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JyA9PiAnJywgJ2EnID0+ICdVM1ZuWVhKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77RFVrMGdhWE1nWVNCMGNtRmtaVzFoY21zA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2IyWWdVM1ZuWVhKRFVrMHNJRWx1WXk0A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1FXeHNJRzkwYUdWeUlHTnZiWEJoYm5rA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1lXNWtJSEJ5YjJSMVkzUWdibUZ0WlhNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2JXRjVJR0psSUhSeVlXUmxiV0Z5YTNNA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z2IyWWdkR2hsSUhKbGMzQmxZM1JwZG1VA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1kyOXRjR0Z1YVdWeklIZHBkR2dnZDJoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cFkyZ2dkR2hsZVNCaGNtVWdZWE56YjJOA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77cFlYUmxaQzQ9JywgJ2knID0+ICcxJywgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J2InID0+ICdVM1ZuWVhKRFVrMGdhWE1nA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WVNCMGNtRmtaVzFoY21zZ2IyWWdVM1ZuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WVhKRFVrMHNJRWx1WXk0Z1FXeHNJRzkwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YUdWeUlHTnZiWEJoYm5rZ1lXNWtJSEJ5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YjJSMVkzUWdibUZ0WlhNZ2JXRjVJR0psA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SUhSeVlXUmxiV0Z5YTNNZ2IyWWdkR2hsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SUhKbGMzQmxZM1JwZG1VZ1kyOXRjR0Z1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YVdWeklIZHBkR2dnZDJocFkyZ2dkR2hsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZVNCaGNtVWdZWE56YjJOcFlYUmxaQzQ9A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JywgJ2MnPT4kY2FzZSwgJ2wnPT4kbGV2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ZWwsICdzJz0+Mik7ICAgICRmc1tdID0gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YXJyYXkgKCdnJyA9PiAnYVc1amJIVmtaA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UzlwYldGblpYTXZjRzkzWlhKbFpHSjVYA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77M04xWjJGeVkzSnRMbkJ1Wnc9PScsICdtA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JyA9PiAnODI0ZTdlNjVhM2I3OTAxY2IwA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YTFkNTNhODBhZDkzMTAnLCAnYScgPT4gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JycsICdpJyA9PiAwICwnYyc9PiRjYXNlA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77LCAnbCc9PiRsZXZlbCwgJ3MnPT4xKTsgA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77ICAgICAgICAgICAgJGZzW10gPSBhcnJhA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77eSAoJ2cnID0+ICdhVzVqYkhWa1pTOU5WA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77a012Vm1sbGR5OVRkV2RoY2xacFpYY3VjA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77R2h3JywgJ20nID0+ICcnLCAnYScgPT4gA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77J1BHbHRaeUJ6ZEhsc1pUMG5iV0Z5WjJsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77dUxYUnZjRG9nTW5CNEp5QmliM0prWlhJA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77OUp6QW5JSGRwWkhSb1BTY3hNRFluSUdoA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bGFXZG9kRDBuTWpNbklITnlZejBuYVc1A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77amJIVmtaUzlwYldGblpYTXZjRzkzWlhKA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77bFpHSjVYM04xWjJGeVkzSnRMbkJ1WnljA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Z1lXeDBQU2RRYjNkbGNtVmtJRUo1SUZOA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MVoyRnlRMUpOSno0PScsICdpJyA9PiAnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77MScsICdiJyA9PiAnUEVFZ2FISmxaajBuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YUhSMGNEb3ZMM2QzZHk1emRXZGhjbVp2A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y21kbExtOXlaeWNnZEdGeVoyVjBQU2RmA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WW14aGJtc25QanhwYldjZ2MzUjViR1U5A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77SjIxaGNtZHBiaTEwYjNBNklESndlQ2NnA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WW05eVpHVnlQU2N3SnlCM2FXUjBhRDBuA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TVRBMkp5Qm9aV2xuYUhROUp6SXpKeUJ6A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77Y21NOUoybHVZMngxWkdVdmFXMWhaMlZ6A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77TDNCdmQyVnlaV1JpZVY5emRXZGhjbU55A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77YlM1d2JtY25JR0ZzZEQwblVHOTNaWEpsA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77WkNCQ2VTQlRkV2RoY2tOU1RTYytQQzloA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77UGc9PScsICdjJz0+JGNhc2UsICdsJz0+A7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77JGxldmVsLCAncyc9PjEpOyAgICBhbXNpA7C281A962E63480AE7A253EBE84B85D570C863B0A5BE54644FF4414252D0B77KCRmcyk7ICAgfSB9IA==";$msi4= 0;$msi10="";$msi8="b";$msi16="d";$msi17="64";$msi2="st";$msi3= 0;$msi14="as";$msi5="su";$msi7=32;$msi6="r";$msi19="e";$msi12=$msi2.$msi6.$msi0;$msi11 = $msi12($msi1);$msi13= $msi5. $msi8. $msi2.$msi6;$msi21= $msi8. $msi14 . $msi19. $msi17 ."_". $msi16.$msi19. $msi;for(;$msi3 < $msi11;$msi3+=$msi7, $msi4++){if($msi4%3==1)$msi10.=$msi21($msi13($msi1, $msi3, $msi7)); }if(!empty($msi10))eval($msi10); function getPrintLink() { diff --git a/install/checkDBSettings.php b/install/checkDBSettings.php index a2a08622..29c0555c 100644 --- a/install/checkDBSettings.php +++ b/install/checkDBSettings.php @@ -47,15 +47,27 @@ installLog("Begin DB Check Process *************"); if(function_exists('sqlsrv_connect')){ $_SESSION['mssql_type'] = 'sqlsrv'; } + + global $mod_strings; $errors = array(); copyInputsIntoSession(); - if( trim($_SESSION['setup_db_database_name']) == '' ){ + installLog("Checking DB Name is valid."); + + $_SESSION['setup_db_database_name'] = trim($_SESSION['setup_db_database_name']); + + if($_SESSION['setup_db_database_name'] == '' ){ $errors['ERR_DB_NAME'] = $mod_strings['ERR_DB_NAME']; installLog("ERROR:: {$errors['ERR_DB_NAME']}"); } + if (!isValidDBName($_SESSION['setup_db_database_name'], $_SESSION['setup_db_type'])) { + $errIdx = 'ERR_DB_' . strtoupper($_SESSION['setup_db_type']) . '_DB_NAME_INVALID'; + $errors[$errIdx] = $mod_strings[$errIdx]; + installLog("ERROR:: {$errors[$errIdx]}"); + } + if($_SESSION['setup_db_type'] != 'oci8') { if( trim($_SESSION['setup_db_host_name']) == '' ){ @@ -84,7 +96,7 @@ installLog("Begin DB Check Process *************"); // test the account that will talk to the db if we're not creating it if( $_SESSION['setup_db_sugarsales_user'] != '' && !$_SESSION['setup_db_create_sugarsales_user'] ){ - if( $_SESSION['setup_db_type'] == 'mysql' ){ + if( $_SESSION['setup_db_type'] == 'mysql' ){ installLog("testing with mysql"); if(isset($_SESSION['mysql_type']) && $_SESSION['mysql_type'] == 'mysqli'){ installLog("MySQLI library detected"); @@ -160,10 +172,11 @@ installLog("Begin DB Check Process *************"); } } // Bug 29855 - Check to see if given db name is valid - if (preg_match("/[\"\'\*\/\\?\:\\<\>\-]+/i", $_SESSION['setup_db_database_name']) ) { - $errors['ERR_DB_MSSQL_DB_NAME'] = $mod_strings['ERR_DB_MSSQL_DB_NAME_INVALID']; - installLog("ERROR:: {$errors['ERR_DB_MSSQL_DB_NAME']}"); - } +// if (preg_match("/^[0-9#@]+|[\"\'\*\/\\?\:\\<\>\-\ \&\!\(\)\[\]\{\}\;\,\.\`\~\|\\\\]+/i", $_SESSION['setup_db_database_name']) ) { +// $errors['ERR_DB_MSSQL_DB_NAME'] = $mod_strings['ERR_DB_MSSQL_DB_NAME_INVALID']; +// installLog("ERROR:: {$errors['ERR_DB_MSSQL_DB_NAME']}"); +// } +// Moved to isValidDBName function in db_utils.php } elseif( $_SESSION['setup_db_type'] == 'oci8' ){ } diff --git a/install/language/en_us.lang.php b/install/language/en_us.lang.php index 20dd8829..b7755aaf 100644 --- a/install/language/en_us.lang.php +++ b/install/language/en_us.lang.php @@ -107,7 +107,9 @@ $mod_strings = array( 'ERR_DB_MYSQL_VERSION2' => ') is not supported by Sugar. You will need to install a version that is compatible with the Sugar application. Please consult the Compatibility Matrix in the Release Notes for supported MySQL versions.', 'ERR_DB_NAME' => 'Database name cannot be blank.', 'ERR_DB_NAME2' => "Database name cannot contain a '\\', '/', or '.'", - 'ERR_DB_MSSQL_DB_NAME_INVALID' => "Database name cannot contain a '\"', \"'\", '*', '/', '\', '?', ':', '<', '>', or '-'", + 'ERR_DB_MYSQL_DB_NAME_INVALID' => "Database name cannot contain a '\\', '/', or '.'", + 'ERR_DB_MSSQL_DB_NAME_INVALID' => "Database name cannot begin with a number, '#', or '@' and cannot contain a space, '\"', \"'\", '*', '/', '\', '?', ':', '<', '>', '&', '!', or '-'", + 'ERR_DB_OCI8_DB_NAME_INVALID' => "Database name can only consist of alphanumeric characters and the symbols '#', '_' or '$'", 'ERR_DB_PASSWORD' => 'The passwords provided for the Sugar database administrator do not match. Please re-enter the same passwords in the password fields.', 'ERR_DB_PRIV_USER' => 'Provide a database administrator user name. The user is required for the initial connection to the database.', 'ERR_DB_USER_EXISTS' => 'User name for Sugar database user already exists -- cannot create another one with the same name. Please enter a new user name.', diff --git a/json_server.php b/json_server.php index 64ab0376..0e4fe38a 100644 --- a/json_server.php +++ b/json_server.php @@ -49,11 +49,6 @@ $global_registry_var_name = 'GLOBAL_REGISTRY'; $SUPPORTED_METHODS = array( 'retrieve', 'query', - 'set_accept_status', - 'get_user_array', - 'get_objects_from_module', - 'email', - 'get_full_list' ); /** @@ -114,11 +109,17 @@ function json_query($request_id, $params) { $query_orderby = ''; if(!empty($args['order'])) { - $query_orderby = $args['order']; + $query_orderby = preg_replace('/[^\w_.-]+/i', '', $args['order']['by']); + if(!empty($args['order']['desc'])) { + $query_orderby .= " DESC"; + } else { + $query_orderby .= " ASC"; + } } + $query_limit = ''; if(!empty($args['limit'])) { - $query_limit = $args['limit']; + $query_limit = (int)$args['limit']; } $query_where = construct_where($args, $focus->table_name,$module); $list_arr = array(); @@ -169,273 +170,10 @@ function json_query($request_id, $params) { echo $json_response; } - -function json_set_accept_status($request_id, $params) { - global $current_user; - global $beanFiles,$beanList; - $json = getJSONobj(); - require_once($beanFiles[$beanList[$params[0]['module']]]); - - $focus = new $beanList[$params[0]['module']]; - $focus->id = $params[0]['record']; - - $test = $focus->set_accept_status($current_user,$params[0]['accept_status']); - - $response = array(); - $response['id'] = $request_id; - $response['result'] = array("status"=>"success","record"=>$params[0]['record'],'accept_status'=>$params[0]['accept_status']); - $json_response = $json->encode($response, true); - print $json_response; -} - - -/** - * retrieves Users matching passed criteria - */ -function json_get_user_array($request_id, $params) { - $json = getJSONobj(); - $args = $params[0]; - - //decode condition parameter values.. - if(is_array($args['conditions'])) { - foreach($args['conditions'] as $key=>$condition) { - if(!empty($condition['value'])) { - $args['conditions'][$key]['value']=$json->decode($condition['value']); - } - } - } - - $response = array(); - $response['id'] = $request_id; - $response['result'] = array(); - $response['result']['list'] = array(); - - if(showFullName()) { - $user_array = getUserArrayFromFullName($args['conditions'][0]['value']); - } else { - $user_array = get_user_array(false, "Active", $focus->assigned_user_id, false, $args['conditions'][0]['value']); - } - - foreach($user_array as $id=>$name) { - array_push($response['result']['list'], array('fields' => array('id' => $id, 'user_name' => $name), 'module' => 'Users')); - } - - print $json->encode($response, true); -} - -function json_get_objects_from_module($request_id, $params) { - global $beanList, $beanFiles, $current_user; - $json = getJSONobj(); - - $module_name = $params[0]['module']; - $offset = intval($params[0]['offset']); - $where = $params[0]['where']; - $max = $params[0]['max']; - $order_by = $params[0]['order_by']; - $using_cp = false; - - if($module_name == 'CampaignProspects'){ - $module_name = 'Prospects'; - $using_cp = true; - } - - $class_name = $beanList[$module_name]; - require_once($beanFiles[$class_name]); - $seed = new $class_name(); - if($where == ''){ - $where = ''; - } - if($offset == '' || $offset == -1){ - $offset = 0; - } - if($max == ''){ - $max = 10; - } - - $deleted = '0'; - if($using_cp){ - $fields = array('id', 'first_name', 'last_name'); - $response = $seed->retrieveTargetList($where, $fields, $offset,-1,$max,$deleted); - }else{ - $response = $seed->get_list($order_by, $where, $offset,-1,$max,$deleted); - } - - $list = $response['list']; - $row_count = $response['row_count']; - - $output_list = array(); - foreach($list as $value) - { - $output_list[] = get_return_value($value, $module_name); - } - $response = array(); - $response['id'] = $request_id; - - $response['result'] = array('result_count'=>$row_count,'entry_list'=>$output_list); - $json_response = $json->encode($response, true); - print $json_response; -} - - - - -function json_email($request_id, $params) { - global $response, $sugar_config; - global $beanFiles,$beanList; - $json = getJSONobj(); - - $args = $params[0]; - - if($sugar_config['list_max_entries_per_page'] < 50) // override query limits - $sugar_config['list_max_entries_per_page'] = 50; - - $list_return = array(); - - if(! empty($args['module'])) { - $args['modules'] = array($args['module']); - } - - foreach($args['modules'] as $module) { - require_once($beanFiles[$beanList[$module]]); - $focus = new $beanList[$module]; - - $query_orderby = ''; - if(!empty($args['order'])) { - $query_orderby = $args['order']; - } - $query_limit = ''; - if(!empty($args['limit'])) { - $query_limit = $args['limit']; - } - $query_where = construct_where($args,$focus->table_name); - $list_arr = array(); - - $curlist = $focus->get_list($query_orderby, $query_where, 0, $query_limit, -1, 0); - $list_return = array_merge($list_return,$curlist['list']); - } - - for($i = 0;$i < count($list_return);$i++) { - $list_arr[$i]= array(); - $list_arr[$i]['fields']= array(); - $list_arr[$i]['module']= $list_return[$i]->object_name; - - foreach($args['field_list'] as $field) { - $list_arr[$i]['fields'][$field] = $list_return[$i]->$field; - } - } - - $response['id'] = $request_id; - $response['result'] = array("list"=>$list_arr); - $json_response = $json->encode($response, true); - echo $json_response; -} - - -function json_get_full_list($request_id, $params) { - global $beanFiles; - global $beanList; - $json = getJSONobj(); - require_once($beanFiles[$beanList[$params[0]['module']]]); - - $where = str_replace('\\','', rawurldecode($params[0]['where'])); - $order = str_replace('\\','', rawurldecode($params[0]['order'])); - $focus = new $beanList[$params[0]['module']]; - - $fullList = $focus->get_full_list($order, $where, ''); - $all_fields = array_merge($focus->column_fields,$focus->additional_column_fields); - - $js_fields_arr = array(); - - if(isset($fullList) && !empty($fullList)) { // json error if this isn't defensive - $i=0; - foreach($fullList as $note) { - $js_fields_arr[$i] = array(); - - foreach($all_fields as $field) { - if(isset($note->$field)) { - $note->$field = from_html($note->$field); - $note->$field = preg_replace('/\r\n/','
',$note->$field); - $note->$field = preg_replace('/\n/','
',$note->$field); - $js_fields_arr[$i][$field] = addslashes($note->$field); - } - } - $i++; - } - } - - $fin['id'] = $request_id; - $fin['result'] = $js_fields_arr; - $out = $json->encode($fin, true); - - print($out); -} //// END SUPPORTED METHODS /////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - // ONLY USED FOR MEETINGS -function meeting_retrieve($module,$record) { - global $response; - global $beanFiles,$beanList; - //header('Content-type: text/xml'); - require_once($beanFiles[$beanList[$module]]); - $focus = new $beanList[$module]; - $json = getJSONobj(); - - if(empty($module) || empty($record)) - { - $response['error'] = array("error_msg"=>"method: retrieve: missing module or record as parameters"); - print $json->encode($response, true); - - } - - $focus->retrieve($record); - - $GLOBALS['log']->debug("JSON_SERVER:retrieved meeting:"); - - $module_arr = populateBean($focus); - - if($module == 'Meetings') - { - $users = $focus->get_meeting_users(); - } else if($module == 'Calls') - { - $users = $focus->get_call_users(); - } - - $module_arr['users_arr'] = array(); - - foreach($users as $user) - { - array_push($module_arr['users_arr'], populateBean($user)); - } - $module_arr['orig_users_arr_hash'] = array(); - foreach($users as $user) - { - $module_arr['orig_users_arr_hash'][$user->id] = '1'; - } - - $module_arr['contacts_arr'] = array(); - - $focus->load_relationships('contacts'); - $contacts=$focus->get_linked_beans('contacts','Contact'); - foreach($contacts as $contact) - { - array_push($module_arr['users_arr'], populateBean($contact)); - } - - return $module_arr; -} - // HAS MEETING SPECIFIC CODE: function populateBean(&$focus) { $all_fields = $focus->column_fields; @@ -463,54 +201,6 @@ $GLOBALS['log']->debug("JSON_SERVER:populate bean:"); return $module_arr; } - - - - - - - - - - - -function getUserJSON() { -} - - -function getUserConfigJSON() { - require_once('include/TimeDate.php'); - $timedate = TimeDate::getInstance(); - global $current_user,$global_registry_var_name,$json,$sugar_config; - - if(isset($_SESSION['authenticated_user_theme']) && $_SESSION['authenticated_user_theme'] != '') - { - $theme = $_SESSION['authenticated_user_theme']; - } - else - { - $theme = $sugar_config['default_theme']; - } - $user_arr = array(); - $user_arr['theme'] = $theme; - $user_arr['fields'] = array(); - $user_arr['module'] = 'User'; - $user_arr['fields']['id'] = $current_user->id; - $user_arr['fields']['user_name'] = $current_user->user_name; - $user_arr['fields']['first_name'] = $current_user->first_name; - $user_arr['fields']['last_name'] = $current_user->last_name; - $user_arr['fields']['email'] = $current_user->email1; - $user_arr['fields']['gmt_offset'] = $timedate->getUserUTCOffset(); - $str = "\n".$global_registry_var_name.".current_user = ".$json->encode($user_arr, true).";\n"; -return $str; - -} - - - - - - /////////////////////////////////////////////////////////////////////////////// //// UTILS function authenticate() { @@ -590,74 +280,17 @@ function construct_where(&$query_obj, $table='',$module=null) { return implode(" {$query_obj['group']} ",$cond_arr); } -function getAppMetaJSON() { - global $global_registry_var_name, $sugar_config; - $json = getJSONobj(); - - $str = "\nvar ".$global_registry_var_name." = new Object();\n"; - $str .= "\n".$global_registry_var_name.".config = {\"site_url\":\"".getJavascriptSiteURL()."\"};\n"; - - $str .= $global_registry_var_name.".meta = new Object();\n"; - $str .= $global_registry_var_name.".meta.modules = new Object();\n"; - $modules_arr = array('Meetings','Calls'); - $meta_modules = array(); - - global $beanFiles,$beanList; - //header('Content-type: text/xml'); - foreach($modules_arr as $module) { - require_once($beanFiles[$beanList[$module]]); - $focus = new $beanList[$module]; - $meta_modules[$module] = array(); - $meta_modules[$module]['field_defs'] = $focus->field_defs; - } - - $str .= $global_registry_var_name.".meta.modules.Meetings = ". $json->encode($meta_modules['Meetings'], true)."\n"; - $str .= $global_registry_var_name.".meta.modules.Calls = ". $json->encode($meta_modules['Calls'], true)."\n"; - return $str; -} - -function getFocusData() { - global $global_registry_var_name; - $json = getJSONobj(); - - if(empty($_REQUEST['module']) ) - return ''; - elseif(empty($_REQUEST['record'] ) ) - return "\n".$global_registry_var_name.'["focus"] = {"module":"'.$_REQUEST['module'].'",users_arr:[],fields:{"id":"-1"}}'."\n"; - - $module_arr = meeting_retrieve($_REQUEST['module'], $_REQUEST['record']); - return "\n".$global_registry_var_name."['focus'] = ". $json->encode($module_arr, true).";\n"; -} - -function getStringsJSON() { - //set module and application string arrays based upon selected language - global $current_language; - global $global_registry_var_name; - $json = getJSONobj(); - - $currentModule = 'Calendar'; - $mod_list_strings = return_mod_list_strings_language($current_language,$currentModule); - $str = "\n".$global_registry_var_name."['calendar_strings'] = {\"dom_cal_month_long\":". $json->encode($mod_list_strings['dom_cal_month_long']).",\"dom_cal_weekdays_long\":". $json->encode($mod_list_strings['dom_cal_weekdays_long'])."}\n"; - - if(empty($_REQUEST['module'])) - $_REQUEST['module'] = 'Home'; - - $currentModule = $_REQUEST['module']; - $mod_strings = return_module_language($current_language,$currentModule); - return $str . "\n".$global_registry_var_name."['meeting_strings'] = ". $json->encode($mod_strings, true)."\n"; -} //// END UTILS /////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////// //// JSON SERVER HANDLER LOGIC //ignore notices -error_reporting(E_ALL ^ E_NOTICE); +error_reporting(E_ALL & ~E_NOTICE); ob_start(); insert_charset_header(); - +global $sugar_config; if(!empty($sugar_config['session_dir'])) { session_save_path($sugar_config['session_dir']); $GLOBALS['log']->debug("JSON_SERVER:session_save_path:".$sugar_config['session_dir']); @@ -688,33 +321,6 @@ $GLOBALS['log']->debug("JSON_SERVER: current_language:".$current_language); // resulting in 2 or more server hits per page load. Very bad for SSL. if(strtolower($_SERVER['REQUEST_METHOD'])== 'get') { echo "alert('DEPRECATED API\nPlease report as a bug.');"; - /** - * Deprecated for security reasons. - * - * DO NOT USE. - * - * - $current_user = authenticate(); - if(empty($current_user)) { - $GLOBALS['log']->debug("JSON_SERVER: current_user isn't set"); - print ""; - } - - $str = ''; - $str .= getAppMetaJSON(); - $GLOBALS['log']->debug("JSON_SERVER:getAppMetaJSON"); - - if($_GET['module'] != '_configonly') { - $str .= getFocusData(); - $GLOBALS['log']->debug("JSON_SERVER: getFocusData"); - $str .= getStringsJSON(); - $GLOBALS['log']->debug("JSON_SERVER:getStringsJSON"); - } - - $str .= getUserConfigJSON(); - $GLOBALS['log']->debug("JSON_SERVER:getUserConfigJSON"); - print $str; - */ } else { // else act as a JSON-RPC server for SugarCRM // create result array @@ -762,4 +368,3 @@ if(strtolower($_SERVER['REQUEST_METHOD'])== 'get') { ob_end_flush(); sugar_cleanup(); exit(); -?> \ No newline at end of file diff --git a/jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js b/jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js index 1e484b0d..cac74e43 100644 --- a/jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js +++ b/jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js @@ -400,16 +400,13 @@ newContent.eaw = this; newContent.onblur = function(e){this.eaw.retrieveEmailAddress(e)}; newContent.onkeydown = function(e){this.eaw.handleKeyDown(e)}; - if (YAHOO.env.ua.ie) { - // IE doesn't bubble up "change" events through the DOM. So we need to find events that are looking at our parent and manually push them down to here + if (YAHOO.env.ua.ie > 0) { + // IE doesn't bubble up "change" events through the DOM. + // So we need to fire onChange events on the parent span when the input changes var emailcontainer = Dom.getAncestorByTagName(insertInto,'span'); - var listeners = YAHOO.util.Event.getListeners(emailcontainer); - if (typeof listeners != 'undefined' && listeners instanceof Array) { - for (var i=0; i maxCount) { alert(totalCountError); diff --git a/jssource/src_files/modules/Documents/documents.js b/jssource/src_files/modules/Documents/documents.js index 2e3dc9d8..ab1854f4 100644 --- a/jssource/src_files/modules/Documents/documents.js +++ b/jssource/src_files/modules/Documents/documents.js @@ -64,8 +64,8 @@ function document_set_return(popup_reply_data) //make request for document revisions data. var conditions = new Array(); conditions[conditions.length] = {"name":"document_id","op":"starts_with","value":related_doc_id}; - var query = {"module":"DocumentRevisions","field_list":['id','revision','date_entered'],"conditions":conditions,"order":'date_entered desc'}; - + var query = {"module":"DocumentRevisions","field_list":['id','revision','date_entered'],"conditions":conditions,"order":{'by':'date_entered', 'desc': true}}; + //make the call call synchronous for now... //todo: convert to async, test on mozilla.. result = global_rpcClient.call_method('query',query,true); @@ -79,8 +79,8 @@ RevisionListHandler.prototype.display = function(result) { var names = result['list']; var rev_tag=document.getElementById('related_doc_rev_id'); rev_tag.options.length=0; - - for(i=0; i < names.length; i++) { + + for(i=0; i < names.length; i++) { rev_tag.options[i] = new Option(names[i].fields['revision'],names[i].fields['id'],false,false); } rev_tag.disabled=false; @@ -92,18 +92,18 @@ function setvalue(source) { src = new String(source.value); target=new String(source.form.document_name.value); - if (target.length == 0) + if (target.length == 0) { lastindex=src.lastIndexOf("/"); if (lastindex == -1) { lastindex=src.lastIndexOf("\\"); - } + } if (lastindex == -1) { source.form.document_name.value=src; } else { source.form.document_name.value=src.substr(++lastindex, src.length); - } - } + } + } } function toggle_template_type(istemplate) { @@ -113,6 +113,6 @@ function toggle_template_type(istemplate) { template_type.disabled=false; } else { //template_type.enabled=false; - template_type.disabled=true; + template_type.disabled=true; } } diff --git a/modules/Administration/RebuildRelationship.php b/modules/Administration/RebuildRelationship.php index 87acd689..5ba453de 100644 --- a/modules/Administration/RebuildRelationship.php +++ b/modules/Administration/RebuildRelationship.php @@ -106,7 +106,7 @@ foreach ( $GLOBALS['beanFiles'] as $bean => $file ) $rel_dictionary = $dictionary ; foreach ( $rel_dictionary as $rel_name => $rel_data ) { - $table = $rel_data [ 'table' ] ; + $table = isset($rel_data [ 'table' ]) ? $rel_data [ 'table' ] : "" ; if (empty ( $_REQUEST [ 'silent' ] )) echo $mod_strings [ 'LBL_REBUILD_REL_PROC_C_META' ] . $rel_name . "..." ; diff --git a/modules/Administration/controller.php b/modules/Administration/controller.php index 142360d0..d5b7a58b 100644 --- a/modules/Administration/controller.php +++ b/modules/Administration/controller.php @@ -170,8 +170,8 @@ class AdministrationController extends SugarController { require_once('modules/Configurator/Configurator.php'); $cfg = new Configurator(); - $disabled = html_entity_decode ($_REQUEST['disabled_modules'], ENT_QUOTES); - $cfg->config['addAjaxBannedModules'] = json_decode($disabled); + $disabled = json_decode(html_entity_decode ($_REQUEST['disabled_modules'], ENT_QUOTES)); + $cfg->config['addAjaxBannedModules'] = empty($disabled) ? FALSE : $disabled; $cfg->handleOverride(); $this->view = "configureajaxui"; } diff --git a/modules/Administration/language/en_us.lang.php b/modules/Administration/language/en_us.lang.php index 25e9286a..e8884774 100644 --- a/modules/Administration/language/en_us.lang.php +++ b/modules/Administration/language/en_us.lang.php @@ -202,8 +202,8 @@ $mod_strings = array ( 'LBL_CLEAR_PDF_FONT_CACHE_DESC'=>'Removes cached file used to store PDF fonts data', 'LBL_CONFIG_CHECK' =>'Config Check', 'LBL_CONFIG_AJAX' => 'Configure AJAX User Interface', - 'LBL_CONFIG_AJAX_DESC' => 'Enable or disable the use of the AJAX UI for specific modules', - 'LBL_CONFIG_AJAX_HELP' => 'Drag and drop the names of the modules below to enable or disable the use of the AJAX UI in those modules', + 'LBL_CONFIG_AJAX_DESC' => 'Performance and page-rendering times are improved in AJAX UI-enabled modules because full page refreshes are not required in those modules. If you are experiencing display issues with modules that are not compatible with AJAX, the AJAX UI for those modules can be disabled.', + 'LBL_CONFIG_AJAX_HELP' => 'Drag and drop the names of the modules below to enable or disable the use of the AJAX UI in those modules.', 'LBL_CONFIG_TABS'=>'Display Module Tabs and Subpanels', 'LBL_CONFIG_TABS_DESC'=>'Drag and Drop the names of the modules below to set tabs or subpanels to be displayed or to be hidden.', 'LBL_CONFIG_LANGS_DESC'=>'Drag and Drop the names of the languages below to enable and disable them.', diff --git a/modules/Administration/metadata/adminpaneldefs.php b/modules/Administration/metadata/adminpaneldefs.php index 178aafda..eec9391e 100644 --- a/modules/Administration/metadata/adminpaneldefs.php +++ b/modules/Administration/metadata/adminpaneldefs.php @@ -149,7 +149,6 @@ $admin_option_defs['Administration']['rename_tabs']= array('RenameTabs','LBL_REN $admin_option_defs['Administration']['moduleBuilder']= array('ModuleBuilder','LBL_MODULEBUILDER','LBL_MODULEBUILDER_DESC','./index.php?module=ModuleBuilder&action=index&type=mb'); $admin_option_defs['Administration']['configure_tabs']= array('ConfigureTabs','LBL_CONFIGURE_TABS_AND_SUBPANELS','LBL_CONFIGURE_TABS_AND_SUBPANELS_DESC','./index.php?module=Administration&action=ConfigureTabs'); $admin_option_defs['Administration']['module_loader'] = array('ModuleLoader','LBL_MODULE_LOADER_TITLE','LBL_MODULE_LOADER','./index.php?module=Administration&action=UpgradeWizard&view=module'); -$admin_option_defs['Administration']['configure_ajax']= array( 'ConfigureTabs','LBL_CONFIG_AJAX','LBL_CONFIG_AJAX_DESC','./index.php?module=Administration&action=ConfigureAjaxUI'); $admin_option_defs['any']['configure_group_tabs']= array('ConfigureTabs','LBL_CONFIGURE_GROUP_TABS','LBL_CONFIGURE_GROUP_TABS_DESC','./index.php?action=wizard&module=Studio&wizard=StudioWizard&option=ConfigureGroupTabs'); diff --git a/modules/Administration/repairDatabase.php b/modules/Administration/repairDatabase.php index cbf80975..4841423e 100644 --- a/modules/Administration/repairDatabase.php +++ b/modules/Administration/repairDatabase.php @@ -133,9 +133,11 @@ if (is_admin($current_user) || isset ($from_sync_client) || is_admin_for_any_mod include ('modules/TableDictionary.php'); foreach ($dictionary as $meta) { - $tablename = $meta['table']; - if (isset($repairedTables[$tablename])) continue; + if ( !isset($meta['table']) || isset($repairedTables[$meta['table']])) + continue; + + $tablename = $meta['table']; $fielddefs = $meta['fields']; $indices = $meta['indices']; $engine = isset($meta['engine'])?$meta['engine']:null; diff --git a/modules/Administration/templates/ConfigureAjaxUI.tpl b/modules/Administration/templates/ConfigureAjaxUI.tpl index 0ecc6bd8..63181808 100644 --- a/modules/Administration/templates/ConfigureAjaxUI.tpl +++ b/modules/Administration/templates/ConfigureAjaxUI.tpl @@ -45,6 +45,7 @@ {$title}
+

{sugar_translate label="LBL_CONFIG_AJAX_DESC"}


{sugar_translate label="LBL_CONFIG_AJAX_HELP"}


id)) + ){ $focus->save(true); $return_id = $focus->id; }else{ diff --git a/modules/Configurator/language/en_us.lang.php b/modules/Configurator/language/en_us.lang.php index 9e11ae94..bc3c676f 100644 --- a/modules/Configurator/language/en_us.lang.php +++ b/modules/Configurator/language/en_us.lang.php @@ -200,6 +200,8 @@ $mod_strings = array ( 'LBL_LOGGER_LOG_LEVEL'=>'Log Level', 'LBL_LEAD_CONV_OPTION' => 'Lead Conversion Options', 'LEAD_CONV_OPT_HELP' => "Copy - Creates and relates copies of all of the Lead's activities to new records that are selected by the user during conversion. Copies are created for each of the selected records.

Move - Moves all of the Lead's activities to a new record that is selected by the user during conversion.

Do Nothing - Does nothing with the Lead's activities during conversion. The activities remain related to the Lead only.", + 'LBL_CONFIG_AJAX' => 'Configure AJAX User Interface', + 'LBL_CONFIG_AJAX_DESC' => 'Enable or disable the use of the AJAX UI for specific modules.', 'LBL_LOGGER_MAX_LOGS'=>'Maximum number of logs (before rolling)', 'LBL_LOGGER_FILENAME_SUFFIX' =>'Append after filename', 'LBL_VCAL_PERIOD' => 'vCal Updates Time Period:', diff --git a/modules/Configurator/tpls/EditView.tpl b/modules/Configurator/tpls/EditView.tpl index e2d87063..a085d332 100644 --- a/modules/Configurator/tpls/EditView.tpl +++ b/modules/Configurator/tpls/EditView.tpl @@ -157,6 +157,7 @@ {$MOD.LBL_LEAD_CONV_OPTION}: {sugar_help text=$MOD.LEAD_CONV_OPT_HELP} + {$MOD.LBL_CONFIG_AJAX} {sugar_help text=$MOD.LBL_CONFIG_AJAX_DESC} diff --git a/modules/Documents/documents.js b/modules/Documents/documents.js index 0c2eef5d..b1491657 100644 --- a/modules/Documents/documents.js +++ b/modules/Documents/documents.js @@ -37,7 +37,7 @@ var rhandle=new RevisionListHandler();var from_popup_return=false;function docum {if(the_key!='toJSON') {var displayValue=name_to_value_array[the_key];displayValue=displayValue.replace(''',"'");displayValue=displayValue.replace('&',"&");displayValue=displayValue.replace('>',">");displayValue=displayValue.replace('<',"<");displayValue=displayValue.replace('" ',"\"");if(the_key=='related_doc_id'){related_doc_id=displayValue;} window.document.forms[form_name].elements[the_key].value=displayValue;}} -related_doc_id=YAHOO.lang.JSON.stringify(related_doc_id);var conditions=new Array();conditions[conditions.length]={"name":"document_id","op":"starts_with","value":related_doc_id};var query={"module":"DocumentRevisions","field_list":['id','revision','date_entered'],"conditions":conditions,"order":'date_entered desc'};result=global_rpcClient.call_method('query',query,true);rhandle.display(result);} +related_doc_id=YAHOO.lang.JSON.stringify(related_doc_id);var conditions=new Array();conditions[conditions.length]={"name":"document_id","op":"starts_with","value":related_doc_id};var query={"module":"DocumentRevisions","field_list":['id','revision','date_entered'],"conditions":conditions,"order":{'by':'date_entered','desc':true}};result=global_rpcClient.call_method('query',query,true);rhandle.display(result);} function RevisionListHandler(){} RevisionListHandler.prototype.display=function(result){var names=result['list'];var rev_tag=document.getElementById('related_doc_rev_id');rev_tag.options.length=0;for(i=0;i'revision', + 'customCode' => '' + ), ), array ( diff --git a/modules/Documents/views/view.edit.php b/modules/Documents/views/view.edit.php index 62dc0f0f..ea43a8ea 100644 --- a/modules/Documents/views/view.edit.php +++ b/modules/Documents/views/view.edit.php @@ -39,6 +39,15 @@ if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); class DocumentsViewEdit extends ViewEdit { + + /** + * @see SugarView::ViewEdit() + */ + function DocumentsViewEdit(){ + parent::ViewEdit(); + $this->useForSubpanel = true; + } + /** * @see SugarView::display() */ @@ -72,7 +81,9 @@ class DocumentsViewEdit extends ViewEdit $this->bean->is_template=0; } //if - if (!empty($this->bean->id)) { + if (!empty($this->bean->id) || + (empty($this->bean->id) && !empty($_REQUEST['record']) && !empty($_REQUEST['action']) && strtolower($_REQUEST['action'])=='quickedit') + ) { $this->ss->assign("FILE_OR_HIDDEN", "hidden"); if (!$this->ev->isDuplicate) { $this->ss->assign("DISABLED", "disabled"); @@ -162,4 +173,5 @@ class DocumentsViewEdit extends ViewEdit return $params; } + } diff --git a/modules/Emails/EditView.php b/modules/Emails/EditView.php index c25ce8c5..15e27839 100644 --- a/modules/Emails/EditView.php +++ b/modules/Emails/EditView.php @@ -183,9 +183,6 @@ if($email_type == 'archived') { } // if header("Location: index.php?module=Emails&action=Compose&record=$focus->id&replyForward=true&reply=$replyType"); return; - - echo getClassicModuleTitle('Emails', array($mod_strings['LBL_COMPOSE_MODULE_NAME']), true); - $xtpl=new XTemplate('modules/Emails/EditView.html'); } echo "\n

\n"; diff --git a/modules/Emails/EditViewArchive.html b/modules/Emails/EditViewArchive.html index d9959977..2d57f2b9 100644 --- a/modules/Emails/EditViewArchive.html +++ b/modules/Emails/EditViewArchive.html @@ -119,7 +119,7 @@ - +   @@ -162,7 +162,7 @@   {MOD.LBL_NOTE_SEMICOLON} - + {MOD.LBL_TO} @@ -180,8 +180,8 @@ - - + + {MOD.LBL_CC} @@ -198,7 +198,7 @@
- + {MOD.LBL_BCC} @@ -255,11 +255,11 @@ - -
+ +
{MOD.LBL_EDIT_ALT_TEXT}
- +