$recaptcha = new \ReCaptcha\ReCaptcha(RECAPTCHA_SECRET);
     $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
     if (!$resp->isSuccess()) {
         throw new UserException('reCAPTCHA error');
     }
     if (!$_POST['email']) {
         throw new UserException('Email address not entered.');
     }
     if ($_POST['email'] !== $_POST['repeat_email']) {
         throw new UserException('The entered email addresses do not match.');
     }
     if ($dal->selectPersonByEmail($_POST['email']) !== null) {
         throw new UserException('The entered email address is already in use. Please login before requesting an unique id range.');
     }
     $person = array('person_first_name' => $_POST['first_name'], 'person_last_name' => $_POST['last_name'], 'person_organization' => $_POST['organization'], 'person_email' => $_POST['email'], 'person_subscribe' => isset($_POST['subscribe']) ? 'y' : 'n', 'person_email_verified' => 'n', 'person_email_shared_secret' => null, 'person_password_hash' => null);
     $dal->insertPerson($person);
 } else {
     if ($user['person_unapproved_uniqueid_count'] > 0) {
         throw new UserException('A previous unique id range request is still pending approval.');
     }
     $person = $user;
 }
 $unique_id = array('person_id' => $person['person_id'], 'uniqueid_url' => $_POST['url'], 'uniqueid_user_comment' => $_POST['comment']);
 $dal->insertUniqueId($unique_id);
 $subject = "OpenLCB Unique ID Range Requested";
 $body = "Hi " . formatPersonName($person) . ",\r\n\r\nYou were assigned an OpenLCB unique ID range of:\r\n" . formatUniqueIdHex($unique_id) . "\r\n\r\nDelegating organization or person: " . formatPersonName($person) . "\r\nURL: " . $unique_id['uniqueid_url'] . "\r\nComment: " . $unique_id['uniqueid_user_comment'] . "\r\n\r\nThe OpenLCB Group";
 if (!mail_abstraction(array(formatPersonEmail($person)), $subject, $body)) {
     throw new UserError('Failed to send email.');
 }
 $body = "A new OpenLCB unique ID range has been assigned.\r\nYou have been notified as you are a moderator.\r\n\r\n" . formatUniqueIdHex($unique_id) . "\r\n\r\nDelegating organization or person: " . formatPersonName($person) . "\r\nURL: " . $unique_id['uniqueid_url'] . "\r\nComment: " . $unique_id['uniqueid_user_comment'] . "\r\n\r\nUID: " . 'http://' . $_SERVER['HTTP_HOST'] . '/uniqueidrange?uniqueid_id=' . $unique_id['uniqueid_id'] . "\r\nAll pending UIDs: " . "http://" . $_SERVER['HTTP_HOST'] . '/uniqueidranges?pending';
 if (!mail_abstraction(array_map('formatPersonEmail', $dal->selectModerators()), $subject, $body, array(EMAIL_FROM))) {